问题描述
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.
思路分析
两人游戏,一次可以抓1,2,3块石头,求有n个石头时能否抓到最后一块石头稳赢。
小时候的数学题,1+3 = 4。也就是不管怎么抓,只要牢牢控制住两人抓的石头和为4,只要是4的倍数,就必然被对方抓走石头。
代码
class Solution {
public:
bool canWinNim(int n) {
return n%4;
}
};
时间复杂度:
O(1)
空间复杂度:
O(1)
反思
还记得小时用这个坑人的,哈哈哈,都忘了怎么操作了。