2020-12-31 292

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;
}

猜你喜欢

转载自blog.csdn.net/weixin_44495738/article/details/112056650
今日推荐