j
jaryue
V1
2023/03/21阅读:9主题:默认主题
leecode292nim游戏
leecode
题目描述
你和你的朋友,两个人一起玩 Nim 游戏:
桌子上有一堆石头。 你们轮流进行自己的回合, 你作为先手 。 每一回合,轮到的人拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。 假设你们每一步都是最优解。请编写一个函数,来判断你是否可以在给定石头数量为 n 的情况下赢得游戏。如果可以赢,返回 true;否则,返回 false 。
示例 1:
输入:n = 4 输出:false 解释:以下是可能的结果:
-
移除1颗石头。你的朋友移走了3块石头,包括最后一块。你的朋友赢了。 -
移除2个石子。你的朋友移走2块石头,包括最后一块。你的朋友赢了。 3.你移走3颗石子。你的朋友移走了最后一块石头。你的朋友赢了。 在所有结果中,你的朋友是赢家。 示例 2:
输入:n = 1 输出:true 示例 3:
输入:n = 2 输出:true
来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/nim-game 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
法1
理解题意
玩家可以拿1-3个,就是说当有4个石头的时候,无论玩家拿几个,都有剩余的,而对面玩家可以一次性将剩余的石头拿完赢得比赛,就是说在比赛途中,一直将剩余石头==4的倍数给到对面,而对面拿多少个,你就拿4-多少个,这样到对面玩家拿的时候一定是4个,而你就一定是赢家,这样的方法也可用于对面,也就是当开局玩家拿到4的倍数个石头就一定会输掉游戏(理想情况下),其他就可以赢得游戏.
//判断4的倍数
if n%4==0{return false}
return true
执行结果
法1
//判断4的倍数
func canWinNim(n int) bool {
if n%4==0{return false}
return true
}
执行用时: 0 ms , 在所有 Go 提交中击败了 100.00% 的用户 内存消耗: 1.8 MB , 在所有 Go 提交中击败了 82.70% 的用户 通过测试用例: 60 / 60 炫耀一下:
优化
func canWinNim(n int) bool {
return n%4!=0
}
作者介绍
j
jaryue
V1