1. 程式人生 > >#leetcode#Nim Game

#leetcode#Nim Game


You are playing the following Nim Game with your friend: There is a heap of stones on the table, each time one of you take turns to remove 1 to 3 stones. The one who removes the last stone will be the winner. You will take the first turn to remove the stones.

Both of you are very clever and have optimal strategies for the game. Write a function to determine whether you can win the game given the number of stones in the heap.

For example, if there are 4 stones in the heap, then you will never win the game: no matter 1, 2, or 3 stones you remove, the last stone will always be removed by your friend.

------------------------------------------------------------------------

尼姆遊戲,咋一看沒有頭緒,可以從簡單case開始分析,面試時也可以給面試官展示思考過程

n = 1, win

n = 2, win

n = 3, win

n = 4, lose

n = 5, win, 5 - 1 = 4

n = 6, win, 6 - 2 = 4

n = 7, win, 7 - 3 = 4

n = 8, lose

n = 9, win, 9 - 1 = 8

...

不難發現規律,如果你能讓你的對手抽取時檯面上剩下4的倍數個石頭的話,你就贏了

其實對數字敏感的話,讀題時每次可以取1,2,或3個石頭就應該聯想到他們都是4的餘數

public class Solution {
    public boolean canWinNim(int n) {
        if(n <= 0 )
            return false;
        return n % 4 != 0; 
    }
}

時間複雜度O(1)