leetcode 292. Nim 游戏
题目描述
你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。
你们是聪明人,每一步都是最优解。 编写一个函数,来判断你是否可以在给定石头数量的情况下赢得游戏。
示例:
输入: 4
输出: false
解释: 如果堆中有 4 块石头,那么你永远不会赢得比赛;
因为无论你拿走 1 块、2 块 还是 3 块石头,最后一块石头总是会被你的朋友拿走。
解题思路
根据题意找规律
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | … |
---|---|---|---|---|---|---|---|---|---|
T | T | T | F | T | T | T | F | T | … |
通过上面的表格,可以看出来,当有5个时,只要1和4相组合,就可以等到4,同样的2和4得到6,这样按照这个规律,只要拿到4的倍数肯定是false,所以只要找到规律,一行代码就可以搞定
class Solution {
public:
bool canWinNim(int n) {
return n%4 != 0;
}
};
或者采用位运算的操作
class Solution {
public:
bool canWinNim(int n) {
return (n & 3) != 0;
}
};
欢迎大家关注我的个人公众号,同样的也是和该博客账号一样,专注分享技术问题,我们一起学习进步