愛麗絲和鮑勃一起玩遊戲,他們輪流行動。愛麗絲先手開局。
最初,黑板上有乙個數字n
。在每個玩家的回合,玩家需要執行以下操作:
如果玩家無法執行這些操作,就會輸掉遊戲。
只有在愛麗絲在遊戲中取得勝利時才返回true
,否則返回false
。假設兩個玩家都以最佳狀態參與遊戲。
示例1:
輸入:2
輸出:true
解釋:愛麗絲選擇 1,鮑勃無法進行操作。
示例2:
輸入:3
輸出:false
解釋:愛麗絲選擇 1,鮑勃也選擇 1,然後愛麗絲無法進行操作。
如果當前數n對於愛麗絲先手為勝,則對於愛麗絲後手則為負,故對於乙個新的數n,愛麗絲需要選擇乙個合適的除數x,使得n-x後新的n對鮑勃來說為負,如此方可勝利。
因此,對於n
,遍歷n
的除數,然後判斷n-x
的結果是否為負,若存在乙個x
,使得n-x
為勝,則愛麗絲可以獲勝。
現已知n=2
時,愛麗絲勝,n=3
時,愛麗絲負。則當n=4
時,滿足要求的除數有1
和2
。當愛麗絲選擇1
時,n=n-1=3
。因為n=3
時,先手的無論怎麼選,都是負,因此鮑勃一定輸。因此愛麗絲選1時會勝。當愛麗絲選擇2
時,n=n-2=2
,n=2
時,先手的一定勝,故鮑勃一定會勝,因此愛麗絲負。故可知,n=4
時,愛麗絲會獲勝。以此類推即可。
class
solution
:def
divisorgame
(self, n:
int)
->
bool
: n=
[false
,false
,true
,false
]if n<4:
return n[n]
else
:for i in
range(4
,n+1):
ans=
false
for j in
range(1
,i):
if i%j==0:
ans=ans or
(not n[i-j]
)return n[n]
給定二叉樹的根節點root
,找出存在於不同節點a
和b
之間的最大值v
,其中v = |a.val - b.val|
,且a
是b
的祖先。(如果 a 的任何子節點之一為 b,或者 a 的任何子節點是 b 的祖先,那麼我們認為 a 是 b 的祖先)
示例:
輸入:[8,3,10,1,6,null,14,null,null,4,7,13]
輸出:7
解釋:
我們有大量的節點與其祖先的差值,其中一些如下:
|8 - 3| = 5
|3 - 7| = 4
|8 - 1| = 7
|10 - 13| = 3
在所有可能的差值中,最大值 7 由 |8 - 1| = 7 得出。
樹中的節點數在2
到5000
之間。
每個節點的值介於0
到100000
之間。
從根節點開始,同時遍歷左子樹和右子樹。用兩個變數記錄之前層的最大值和最小值,返回這一層和之前的最大值最小值運算後的最大的差值,同時,更新到這一層為止的最大值和最小值,最終即可得到結果。
/**
* definition for a binary tree node.
* struct treenode
* };
*/class
solution
intmaxancestordiff
(treenode* root)
};
給定乙個整數陣列 a,返回 a 中最長等差子串行的長度。
回想一下,a
的子串行是列表a[i_1], a[i_2], ..., a[i_k]
其中0 <= i_1 < i_2 < ... < i_k <= a.length - 1
。並且如果b[i+1] - b[i]( 0 <= i < b.length - 1)
的值都相同,那麼序列b
是等差的。
示例1:
輸入:[3,6,9,12]
輸出:4
解釋:
整個陣列是公差為 3 的等差數列。
示例2:
輸入:[9,4,7,2,10]
輸出:3
解釋:最長的等差子串行是 [4,7,10]。
示例3:
輸入:[20,1,15,3,10,5,8]
輸出:4
解釋:最長的等差子串行是 [20,15,10,5]。
2 <= a.length <= 2000
0 <= a[i] <= 10000
如果a的長度小於3,則直接返回a的長度。否則,預設初始長度為2,遍歷a。對於每個數,計算其與後面數的公差,如果存在乙個等差序列,則記錄其長度。最後返回最長的序列即可。具體實現見參考**。
class
solution}if
(count > maxlen)}}
return maxlen;}}
;
我們從二叉樹的根節點root
開始進行深度優先搜尋。
在遍歷中的每個節點處,我們輸出d
條短劃線(其中d
是該節點的深度),然後輸出該節點的值。(如果節點的深度為d
,則其直接子節點的深度為d + 1
。根節點的深度為0
)。
如果節點只有乙個子節點,那麼保證該子節點為左子節點。
給出遍歷輸出s
,還原樹並返回其根節點root
。
示例1:
輸入:"1-2--3--4-5--6--7"
輸出:[1,2,5,3,4,6,7]
輸入:"1-2--3---4-5--6---7"
輸出:[1,2,5,3,null,6,null,4,null,7]
輸入:"1-401--349---90--88"
輸出:[1,401,null,349,88,90]
首先,解析字串,獲取每個節點的數值和深度。
隨後由上至下,根據節點的深度建立樹。
具體實現配合參考**講解
/**
* definition for a binary tree node.
* struct treenode
* };
*/class
solution
,d[1005];
treenode*
work
(int l,
int r)
treenode*
recoverfrompreorder
(string s)
return
work(1
,n);}}
;
其中:
int a[
1005]=
,d[1005
];
a用於記錄節點的值,b用於記錄節點的深度。
分析主函式:
treenode*
recoverfrompreorder
(string s)
return
work(1
,n);
}
其中,n用於記錄節點數目。
for迴圈用於解析字串。如果遇到的是』-』,則j增加,當迴圈條件不滿足時,記錄節點的深度。
當遇到數字時,當前節點的值通過如下方式計算:
接下來分析核心部分:
treenode*
work
(int l,
int r)
其中的mid是判斷下一層的下一層的起點。每次建立乙個節點,隨後遞迴建立其左子樹和右子樹。 leetcode 第132場周賽
愛麗絲和鮑勃一起玩遊戲,他們輪流行動。愛麗絲先手開局。最初,黑板上有乙個數字n。在每個玩家的回合,玩家需要執行以下操作 如果玩家無法執行這些操作,就會輸掉遊戲。只有在愛麗絲在遊戲中取得勝利時才返回true,否則返回false。假設兩個玩家都以最佳狀態參與遊戲。示例 1 輸入 2輸出 true解釋 愛...
leetcode周賽 第176場
題目描述 給你乙個 m n 的矩陣 grid,矩陣中的元素無論是按行還是按列,都以非遞增順序排列。請你統計並返回 grid 中 負數 的數目。示例 1 輸入 grid 4,3,2,1 3,2,1,1 1,1,1,2 1,1,2,3 輸出 8 解釋 矩陣中共有 8 個負數。示例 2 輸入 grid 3...
leetcode 第 180 場周賽
大佬都是3 5分鐘一題,而我10分鐘一題,最後一題還不會。qaq 5356.矩陣中的幸運數 給你乙個m n的矩陣,矩陣中的數字各不相同。請你按任意順序返回矩陣中的所有幸運數。幸運數是指矩陣中滿足同時下列兩個條件的元素 class solution object def luckynumbers se...