LeetCode第15天
阿新 • • 發佈:2021-01-27
LeetCode第231題: 2的冪
- 如果是2的冪, 那麼二進位制應該只有一個1, 其餘為零, 利用位運算即可判斷
class Solution:
def isPowerOfTwo(self, n: int) -> bool:
k = 0
while n > 0:
k += n & 1
n = n >> 1
if k > 1: return False
return True
235.二叉搜尋樹的最近公共祖先
- 先找到每個結點的搜尋路徑, 然後找到最後一個公共結點即可
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
result1 = [ ]
result2 = []
self.dfs(root, p, result1)
self.dfs(root, q, result2)
# for i in range(0, len(result1)):
# print(result1[i].val)
# print()
# for i in range(0, len(result2)):
# print(result2[i].val)
i = 0
length1 = len (result1)
length2 = len(result2)
while i < length1 and i < length2:
if result1[i] != result2[i]:
break
i += 1
return result1[i-1]
def dfs(self, root, target, result):
result.append(root)
if root.val == target.val:
return
elif root.val < target.val:
self.dfs(root.right, target, result)
else:
self.dfs(root.left, target, result)
LeetCode第236題: 二叉樹的最近公共祖先
- 思路與上一題類似, 先遍歷樹找到路徑, 然後找出兩個路徑的最後相同的結點
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
result1 = []
result2 = []
self.dfs(root, p, result1)
self.dfs(root, q, result2)
i = 0
length1 = len(result1)
length2 = len(result2)
while i < length1 and i < length2:
if result1[i] != result2[i]:
break
i += 1
return result1[i-1]
def dfs(self, root, p, result):
if root == None:
return False
result.append(root)
if root == p:
return True
flag = self.dfs(root.left, p, result)
if flag:
return True
flag = self.dfs(root.right, p, result)
if flag:
return True
result.pop()
return False