本題的解法完全參考了 利用二叉搜尋樹的性質,一次遞迴
二叉搜尋樹具有如下性質:若任意結點的左子樹不空,則左子樹上所有結點的值均不大於它的根結點的值。
若任意結點的右子樹不空,則右子樹上所有結點的值均不小於它的根結點的值。
任意結點的左、右子樹也分別為二叉搜尋樹。
因此,我們可以得到求解的思路,假如 p 和 q 都小於根節點的值,那麼遍歷左子樹,假如 p 和 q 都大於根節點的值,就遍歷右子樹,其餘的任何情況下,直接返回根節點,就是我們要的答案。
class
solution
:def
lowestcommonancestor
(self, root:
'treenode'
, p:
'treenode'
, q:
'treenode')-
>
'treenode':if
not root:
return
none
while root:
if p.val > root.val and q.val > root.val:
root = root.right
elif p.val < root.val and q.val < root.val:
root = root.left
else
:return root
class
solution
:def
lowestcommonancestor
(self, root:
'treenode'
, p:
'treenode'
, q:
'treenode')-
>
'treenode':if
not root:
return
none
if p.val > root.val and q.val > root.val:
return self.lowestcommonancestor(root.right, p, q)
elif p.val < root.val and q.val < root.val:
return self.lowestcommonancestor(root.left, p, q)
return root
給定乙個整數,編寫乙個函式來判斷它是否是 2 的冪次方。
class
solution
:def
ispoweroftwo
(self, n:
int)
->
bool
:for i in
range(32
):mask =
1<< i #返回的是2^i
if n ^ mask ==0:
return
true
return
false
這道題目一看是求2的冪我就想到位異或。選擇乙個較大的數num
ma
xnum_
nummax
作為範圍,即我們的方法適用的資料範圍<2n
umma
x< 2^}
<2n
umma
x. 相當於不斷拿n去和2的直到num
ma
xnum_
nummax
冪為模板去比較。
注意:<<
是python的運算子,通過從右側推入零來向左移動,推掉最左邊的位(zero fill left shift)。
[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-tswkxprz-1611755829000)(media/16104455646898/%e5%b1%8f%e5%b9%95%e5%bf%ab%e7%85%a7%202021-01-26%20%e4%b8%8b%e5%8d%8822.57.14%20%e4%b8%8b%e5%8d%88.png)]
class
solution
:def
ispoweroftwo
(self, n:
int)
->
bool
:if n ==0:
return
false
return n &
(n-1)==
0
位運算:求解2的冪
這個解法很簡單,找到規律後非常容易實現。
對於n為2的冪的數,都有 n & (n-1)=0,所以這就是我們的判斷條件。
把 0 單獨拿出來討論是因為0 & (0-1) = 0
,但 0 不是 2的冪。
一枚菜鳥的leetcode刷題筆記 Day5
給你乙個鍊錶陣列,每個鍊錶都已經按公升序排列。請你將所有鍊錶合併到乙個公升序鍊錶中,返回合併後的鍊錶。class solution def merge2lists self,l1,l2 l1 and l2 are two linked lists head listnode rehead head ...
一枚菜鳥的leetcode刷題筆記 Day8
70 爬樓梯 78 子集 乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 問總共有多少條不同的路徑?class solution def uniquepaths self,m...
一枚菜鳥的leetcode刷題筆記 Day11
給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。說明 你的演算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?class solution def singlenumber self,nums list int int tmp for n...