292. Nim游戏
思路一:动态规划
class Solution {
public boolean canWinNim(int n) {
boolean[] res = new boolean[n+1]; //用来记录若干块石头先拿的人必定的结局
if(n<=3)
return true;
for(int i=1;i<=3;i++)
res[i] = true;
for(int i=4;i<n+1;i++){
if (!res[i-1] || !res[i-2] || !res[i-3])
res[i]=true;
}
for(int i=0;i<n+1;i++)
System.out.println("i = "+i+" res = "+res[i]);
return res[n];
}
}
但超出内存限制。
我们从结果中可以看出,只要第一个人取一次使得剩余总数为4的倍数,他必定赢。
思路二:数学!
public boolean canWinNim(int n) {
return (n%4)==0 ? false : true;
}