Leetcode簡單題66、67、69、70、83、88、100
阿新 • • 發佈:2018-12-15
66. 加一
class Solution(object): def plusOne(self, digits): for i in range(len(digits)-1, -1, -1): ad = 0 if digits[i] != 9: digits[i] = digits[i] + 1 + ad break elif digits[i] == 9 and i != 0: digits[i] = 0 ad = 1 else: digits[i] = 0 digits.insert(0, 1) return digits
67. 二進位制求和
思想:二進位制轉十進位制再轉二進位制
class Solution(object):
def addBinary(self, a, b):
a = int(a, 2)
b = int(b, 2)
return bin(a+b)[2:]
69. x 的平方根
class Solution(object):
def mySqrt(self, x):
if x:
x = x ** 0.5
return int(x)
70. 爬樓梯
思想:斐波那契數列(Fibonacci sequence)利用遞迴會出現超出時間限制的錯誤
class Solution:
def climbStairs(self, n):
if n == 0 or n == 1 or n == 2:
return n
else:
n1 = 1
n2 = 2
for i in range(3, n+1):
n3 = n1+n2
n1 = n2
n2 = n3
return n2
83. 刪除排序連結串列中的重複元素
class ListNode(object):
def __init__(self, x):
self.val = x
self.next = None
class Solution(object):
def deleteDuplicates(self, head):
if head == None or head.next == None:
return head
p = head
q = head.next
while q:
if p.val == q.val:
# 判斷是不是最後一個元素,有不同的刪除後處理
if q.next:
p.next = q.next
q = q.next
else:
p.next = None
return head
else:
p = p.next
q = q.next
# q.next = None
return head
if __name__ == '__main__':
l = ListNode(1)
l1 = ListNode(1)
l2 = ListNode(2)
l3 = ListNode(2)
l4 = ListNode(5)
l5 = ListNode(5)
l.next = l1
l1.next = l2
l2.next = l3
l3.next = l4
l4.next = l5
t = Solution()
ll = t.deleteDuplicates(l)
while ll:
print(ll.val)
ll = ll.next
88. 合併兩個有序陣列
思想:兩種方法
方法一:直接合並後排序
方法二:常規比較插入
class Solution(object):
def merge(self, nums1, m, nums2, n):
for i in range(n):
nums1[m+i] = nums2[i]
nums1.sort()
return nums1
def merge1(self, nums1, m, nums2, n):
i = 0
j = 0
while i < m and j < n:
if nums1[i] < nums2[j]:
i += 1
else:
nums1.insert(i, nums2[j])
j += 1
i += 1
while j < n:
nums1.insert(m+j, nums2[j])
j += 1
return nums1
if __name__ == '__main__':
t = Solution()
nums1 = [1, 2, 3, 0, 0, 0]
nums2 = [2, 5, 6]
print(t.merge(nums1, 3, nums2, 3))
100. 相同的樹
class TreeNode(object):
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution(object):
def isSameTree(self, p, q):
if p == None and q == None:
return True
if p != None and q != None and p.val == q.val:
return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)
else:
return False
if __name__ == '__main__':
p = TreeNode(1)
p1 = TreeNode(2)
p2 = TreeNode(3)
p.left = p1
p.right = p2
q = TreeNode(1)
q1 = TreeNode(2)
q2 = TreeNode(3)
q.left = q1
q.right = q2
t = Solution()
print(t.isSameTree(p, q))