1. 程式人生 > >LeetCode 題目-58/66/67 (python實現)

LeetCode 題目-58/66/67 (python實現)

作為要準備踏入碼農行業的人來說,要準備校招,怎麼能不去刷刷LeetCode呢?
58. 最後一個單詞的長度

  • 題目要求:
    給定一個僅包含大小寫字母和空格 ’ ’ 的字串,返回其最後一個單詞的長度。
    如果不存在最後一個單詞,請返回 0 。
    說明:一個單詞是指由字母組成,但不包含任何空格的字串。

  • 示例:

輸入: "Hello World"
輸出: 5
  • 分析:
    以“ ”空格進行字串的切割,並獲取最後一個字元。
    (坑比較多)
class Solution:
    def lengthOfLastWord(self, s):
        z = s.split(' ')
        lists =[i for i in z if i!='' ]
        if lists==[]:
            return 0
        return len(lists[-1])class Solution:
    def lengthOfLastWord(self, s):
        z = s.split(' ')
        lists =[i for i in z if i!='' ]
        if lists==[]:
            return 0
        return len(lists[-1])
  1. 加一
  • 題目要求:
    給定一個由整陣列成的非空陣列所表示的非負整數,在該數的基礎上加一。最高位數字存放在陣列的首位, 陣列中每個元素只儲存一個數字。你可以假設除了整數 0 之外,這個整數不會以零開頭。
  • 示例:
輸入: [1,2,3]
輸出: [1,2,4]
解釋: 輸入陣列表示數字 123。

輸入: [4,3,2,1]
輸出: [4,3,2,2]
解釋: 輸入陣列表示數字 4321。
  • 分析:
    題目的意思就是將陣列最後一個數+1->轉換成整數型計算再轉換成陣列。
class Solution:
    def plusOne(self, digits):
        nums = 0
        for i in digits:
            nums =i+nums*10
        nums = nums+1
        lists = []
        while nums:
            lists.append(nums%10)
            nums = nums//10
        lists.reverse()
        return lists
  1. 二進位制求和
  • 題目要求:
    給定兩個二進位制字串,返回他們的和(用二進位制表示)。輸入為非空字串且只包含數字 1 和 0。
  • 示例:
輸入: a = "11", b = "1"
輸出: "100"

輸入: a = "1010", b = "1011"
輸出: "10101"
  • 分析:
    方法一 利用內建函式
class Solution:
    def addBinary(self, a, b):
        num = int(a, 2) + int(b, 2)
        ans = bin(num)
        return ans[2:]

方法二:轉換成10進位制再計算

class Solution:
    def addBinary(self, a, b):
        numsa=0
        numsb=0
        if a=='0' and b=='0':
            return "0"
        for i in range(0,len(a)):
            numsa = numsa+int(a[-1-i])*(2**i)
        for i in range(0,len(b)):
            numsb = numsb+int(b[-1-i])*(2**i)
        nums =numsa+numsb

        strs =[]
        while nums:
            strs.append(str(nums%2))
            nums=nums//2
        strs.reverse()
        return "".join(strs)