持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情
一、题目描述:
你和你的朋友,两个人一起玩 Nim 游戏:
桌子上有一堆石头。 你们轮流进行自己的回合, 你作为先手 。 每一回合,轮到的人拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。 假设你们每一步都是最优解。请编写一个函数,来判断你是否可以在给定石头数量为 n 的情况下赢得游戏。如果可以赢,返回 true;否则,返回 false 。
示例 1:
输入:n = 4 输出:false 解释:以下是可能的结果:
- 移除1颗石头。你的朋友移走了3块石头,包括最后一块。你的朋友赢了。
- 移除2个石子。你的朋友移走2块石头,包括最后一块。你的朋友赢了。 3.你移走3颗石子。你的朋友移走了最后一块石头。你的朋友赢了。 在所有结果中,你的朋友是赢家。 示例 2:
输入:n = 1 输出:true 示例 3:
输入:n = 2 输出:true
提示:
1 <= n <= 231 - 1
来源:力扣(LeetCode) 链接:leetcode.cn/problems/ni… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、思路分析:
1、假设石头是4的倍数,即4n; 此时由于我方先手,不管我方取走1个、2个或者3个,对方只要对应取走3个、2个或者1个,这样每轮都取走4个,最后一个由对方拿走,对方赢(即后手赢)。 2、假设石头的数量不是4的倍数,即4n+k,1<=k<=3; 此时我方先手,取走k个石头后,剩下的石头个数是4的倍数,相当于石头是4的倍数且对方是先手,参考1可知,我方赢。
三、AC 代码:
class Solution {
public boolean canWinNim(int n) {
return n%4!=0;
}
}
四、总结:
结果截图
掘友们,解题不易,留下个赞或评论再走吧!谢啦~ 💐
希望对你有帮助,期待您找到心意的工作和满意的offer
期待下次再见~
🌇 点赞 👍 收藏 ⭐留言 📝 一键三连 ~关注Jam,从你我做起!