LeetCode简单题:292. Nim 游戏(Python,C++,Java)

一.解法

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;
    }
}
//数学方法
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。