Weekly Contest 132的 除數博弈:code
愛麗絲和鮑勃一塊兒玩遊戲,他們輪流行動。愛麗絲先手開局。遊戲
最初,黑板上有一個數字
N
。在每一個玩家的回合,玩家須要執行如下操做:leetcode選出任一
x
,知足0 < x < N
且N % x == 0
。
用N - x
替換黑板上的數字N
。
若是玩家沒法執行這些操做,就會輸掉遊戲。get只有在愛麗絲在遊戲中取得勝利時才返回
true
,不然返回false
。假設兩個玩家都以最佳狀態參與遊戲。test示例1:im
輸入:2 輸出:true 解釋:愛麗絲選擇 1,鮑勃沒法進行操做。示例2:di
輸入:3 輸出:false 解釋:愛麗絲選擇 1,鮑勃也選擇 1,而後愛麗絲沒法進行操做。提示:vi
1 <= N <= 1000
本題難度爲簡單,但是題目的描述會感受解題十分困難,實際上本題只須要找出愛麗絲和鮑勃勝負的週期便可,同類型的題目有292. Nim遊戲。下面先列出前5
次的勝負狀況:co
N
爲1
時,因爲愛麗絲先手,沒法進行操做,鮑勃勝利,爲false
N
爲2
時,愛麗絲勝利,爲true
N
爲3
時,鮑勃勝利,爲false
N
爲4
時,取數狀況爲1,1,1
,愛麗絲勝利,爲true
N
爲5
時,取數狀況爲1,1,1,1
,鮑勃勝利,爲false
從上面列出的勝負狀況能夠看出,當N
爲奇數時,鮑勃勝利,當N
爲偶數時,愛麗絲勝利。block
/** * 5024. 除數博弈 * 1 false * 2 1 true * 3 1 false * 4 1,1,1 true * 5 1,1,1,1 false * @param N * @return */ public boolean divisorGame(int N) { return N%2==0; }