LeetCode每日一題:Nim遊戲(No.292)

胖宅老鼠發表於2019-03-11

題目:Nim遊戲


你和你的朋友,兩個人一起玩 Nim遊戲:桌子上有一堆石頭,每次你們輪流拿掉 1 - 3 塊石頭。 拿掉最後一塊石頭的人就是獲勝者。你作為先手。
你們是聰明人,每一步都是最優解。編寫一個函式,來判斷你是否可以在給定石頭數量的情況下贏得遊戲。
複製程式碼

示例:


輸入: 4
輸出: false 
解釋: 如果堆中有 4 塊石頭,那麼你永遠不會贏得比賽;
因為無論你拿走 1 塊、2 塊 還是 3 塊石頭,最後一塊石頭總是會被你的朋友拿走。
複製程式碼

思考:


如果石頭為1、2、3,你先手都可以一次拿走獲勝,而4塊時無論你拿幾塊,對手下次都可以一次拿完。
5塊石頭時你可以只拿1塊,剩給對手4塊,這樣你就可以獲勝。6塊7塊同樣可以先手拿2塊和3塊,給對手剩下4塊,自己獲勝。
而8塊時無論你拿多少塊,對手都可以剩下4塊給你,這樣你就輸了。
接下來9塊同樣可以先拿1塊,剩下對手隨便拿幾塊你都可以剩下4塊給對手,最終你會獲勝。以此類推當石頭數為4、8、12、16...即為4的倍數時會輸,其他數量時可以獲勝。
複製程式碼

實現:


class Solution {
    int count = 0;
    public boolean canWinNim(int n) {
        if (n % 4 == 0)
            return false;
        else
            return true;
    }
}
複製程式碼

時間複雜度:O(1),只進行了一次檢查。

空間複雜度:O(1),沒有使用額外的空間。

相關文章