282.Nim Game

292.Nim Game

难度:Easy

你和你的朋友,两个人一起玩 Nim游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。

你们是聪明人,每一步都是最优解。 编写一个函数,来判断你是否可以在给定石头数量的情况下赢得游戏。

示例:

输入: 4
输出: false
解释: 如果堆中有 4 块石头,那么你永远不会赢得比赛;
因为无论你拿走 1 块、2 块 还是 3 块石头,最后一块石头总是会被你的朋友拿走。

方法:直接递归是不行的,肯定会超时。解决方法就是保持先手,只要保证最后一个自己拿,那么前面的保证两个人每次拿到的都是(min+max)个数,让对方拿第四块即可。

class Solution {
public:
bool canWinNim(int n) {
if(!n) return false;
if(n<4) return true;
if(!(n%4)) return false;
else
return true;
}
};