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.二叉搜索树的最近公共祖先
先找到每个结点的搜索路径, 然后找到最后一个公共结点即可
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, 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题: 二叉树的最近公共祖先
思路与上一题类似, 先遍历树找到路径, 然后找出两个路径的最后相同的结点
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