一.解法
https://leetcode-cn.com/problems/nim-game/
要点:数学,动态规划
一开始想到用动态规划做,见java代码,思路是判断自己拿了1-3个后再之前的三个状态,但是数字大了会超时,LeetCode过不了。
规律以及数学告诉我们,每次摸1-3个只要保证对手摸的时候是4的倍数就能赢,所以n一开始不为4的倍数先手必赢。
二.Python实现
class Solution:
def canWinNim(self, n: int) -> bool:
return n%4!=0;
三.C++实现
class Solution {
public:
bool canWinNim(int n) {
return n%4!=0;
}
};
四.java实现
class Solution {
public boolean canWinNim(int n) {
if(n <= 3) return true;
if(!canWinNim(n - 1) || !canWinNim(n - 2) || !canWinNim(n - 3)) return true;
return false;
}
}
//以上方法会超时
class Solution {
public boolean canWinNim(int n) {
return n%4!=0;
}
}
//数学方法