LeetCode.1025-除數遊戲(Divisor Game)

這是小川的第382次更新,第411篇原創

java

01 看題和準備

今天介紹的是LeetCode算法題中Easy級別的第244題(順位題號是1025)。Alice和Bob輪流玩遊戲,Alice首先出發。算法

最初,黑板上有一個數字N. 在每一個玩家的回合中,該玩家進行如下操做:數據結構

選擇0 < x <NN%x == 0的任何xcode

N - x替換黑板上的數字N.遊戲

此外,若是玩家沒法移動,他們將輸掉遊戲。class

當且僅當Alice贏得比賽時才返回True,假設兩個玩家都達到最佳狀態。數據結構與算法

例如:數據

輸入:2
輸出:true
說明:Alice選擇1,Bob沒有更多動做。移動

輸入:3
輸出:false
說明:Alice選擇1,Bob選擇1,Alice再也不移動。di

注意

  • 1 <= N <= 1000

02 解題

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;
}


03 小結

算法專題目前已連續日更超過七個月,算法題文章250+篇,公衆號對話框回覆【數據結構與算法】、【算法】、【數據結構】中的任一關鍵詞,獲取系列文章合集。

以上就是所有內容,若是你們有什麼好的解法思路、建議或者其餘問題,能夠下方留言交流,點贊、留言、轉發就是對我最大的回報和支持!

相關文章
相關標籤/搜索