1. 程式人生 > 其它 >#力扣 LeetCode1025. 除數博弈 @FDDLC

#力扣 LeetCode1025. 除數博弈 @FDDLC

技術標籤:演算法&資料結構

題目描述:

https://leetcode-cn.com/problems/divisor-game/

Java程式碼:

class Solution { //0 < x < N 且 N % x == 0
    public boolean divisorGame(int N) {
        return N%2==0;
    }
}   

說明:

用1到10去找規律,發現輸贏跟奇偶有關:

N=1時,先手輸,因為沒有選擇;

N=2時,先手從1到N-1中選一個N的約數,只有1,後手沒有選擇,故先手贏。記住這裡,誰先碰到2,誰就贏!

如果N>2:

N為奇數時,N的約數x必為奇數,故N-x為偶數。也就是說,碰到奇數的人,他無法改變餘下的數的奇偶性,因為餘下的數只能為偶數!

接下來,另一個人要面對一個偶數:

碰到偶數的人如果發現這個偶數是2,那麼他就贏了!

如果這個偶數不是2,即是大於2的偶數,他有選擇奇偶的主動權:他可以讓餘下的數變成奇數(比如選1),也可以讓餘下的數變成偶數(比如選2)。

既然主動權在自己手上,肯定要選對自己最有利的。而對自己最有利的就是讓餘下的數變成奇數(比如選1),這樣在對方選完後下回自己又會碰到偶數。因為數一直在變小,所以總有一回自己會碰到2,從而鎖定勝局!