LeetCode 題目-58/66/67 (python實現)
阿新 • • 發佈:2019-01-06
作為要準備踏入碼農行業的人來說,要準備校招,怎麼能不去刷刷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])
- 加一
- 題目要求:
給定一個由整陣列成的非空陣列所表示的非負整數,在該數的基礎上加一。最高位數字存放在陣列的首位, 陣列中每個元素只儲存一個數字。你可以假設除了整數 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 和 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)