這是小川的第382次更新,第411篇原創
java
今天介紹的是LeetCode算法題中Easy級別的第244題(順位題號是1025)。Alice和Bob輪流玩遊戲,Alice首先出發。算法
最初,黑板上有一個數字N
. 在每一個玩家的回合中,該玩家進行如下操做:數據結構
選擇0 < x <N
且N%x == 0
的任何x
。code
用N - x
替換黑板上的數字N
.遊戲
此外,若是玩家沒法移動,他們將輸掉遊戲。class
當且僅當Alice贏得比賽時才返回True,假設兩個玩家都達到最佳狀態。數據結構與算法
例如:數據
輸入:2
輸出:true
說明:Alice選擇1,Bob沒有更多動做。移動
輸入:3
輸出:false
說明:Alice選擇1,Bob選擇1,Alice再也不移動。di
注意:
N=1
,0 < x < 1且1%x == 0,沒有符合的數,Alice輸。
N=2
,0 < x < 2且2%x == 0,Alice取1,N變成1,輪到Bob,Bob沒法選擇合適的數,Alice贏。
N=3
,0 < x < 3且3%x == 0,Alice取1,N變成2,輪到Bob,Bob選1,N變成1,輪到Alice再選,沒有符合的數,Alice輸。
N=4
,0 < x < 4且4%x == 0,Alice取1,N變成3,輪到Bob,Bob選1,N變成2,輪到Alice再選1,N變成1,再輪到Bob選,沒有符合的數,Alice贏。
N=5
,0 < x < 5且5%x == 0,Alice取1,N變成4,輪到Bob,Bob選1,N變成3,再輪到Alice選,和前面N等於3結果同樣,Alice輸。
N=6
,0 < x < 6且6%x == 0,Alice取1,N變成5,輪到Bob,Bob選1,N變成4,再輪到Alice選,和前面N等於4結果同樣,Alice贏。
從上面依次計算的例子來看,當N爲奇數的時候,誰先開始,誰就輸,由於對方確定會讓你繼續變成奇數,直到N變成1。
當N爲偶數的時候,誰先開始,誰就贏,第一步取1,將N變成奇數,對方只能繼續取1或者其餘奇數,奇數減去奇數變爲偶數,開始的那一方再取1,直到N變成1。
public boolean divisorGame(int N) { return N%2 == 0; }
算法專題目前已連續日更超過七個月,算法題文章250+篇,公衆號對話框回覆【數據結構與算法】、【算法】、【數據結構】中的任一關鍵詞,獲取系列文章合集。
以上就是所有內容,若是你們有什麼好的解法思路、建議或者其餘問題,能夠下方留言交流,點贊、留言、轉發就是對我最大的回報和支持!