题目
你和你的朋友,两个人一起玩 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)
链接:https://leetcode.cn/problems/nim-game
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解决思路
解决方法
我的做了三天的错误的做法:
fun canWinNim(n: Int): Boolean {
// dfs
//传递下去 当前是否是自己
//
return dfs(n, true)
}
fun dfs(n: Int, mySelf: Boolean): Boolean {
if (mySelf && n <= 3) {
return true
}
for (i in 1..3) {
if(n - i<= 3 && mySelf){
return false
}
if (dfs(n - i, !mySelf)){
return true
}
}
return false
}
正确答案:
fun canWinNim(n: Int): Boolean {
return n % 4 != 0
}
总结
1.数学能力强 聪明的人才能懂得去思考规律
2.少部分人发现定理,能懂的能知道的就赢了50%的人
所以。对于一般人来说 去学习就可以甩开周边人
但是对于天才 不行