Nim Game
Problem
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.
Solution
public class Solution {
public boolean canWinNim(int n) {
return n % 4 != 0;
}
}
Analysis
Remember who got 4 in his or her turn in Nim Game, he or she must lose as the example in description explains
Then, if one got 5, 6, or 7, he or she must win because there is always a way to let the other get 4
Therefore, as long as one get get the multiple of 4, there must be a lost, otherwise there must be a win
In a real interview, the example of 4 might not be mentioned, so we need to think about every number
until we find one that is a must lost or must win.
Then we use that number to conduct the solution