394. Coins in a Line

最后更新

一刷。

用数学方法是看是不是3的倍数。

不用数学方法的话要动态规划。

当前玩家,dp[i]行不行取决于dp[i-1]和dp[i-2],代表下一个玩家能不能赢,另一个玩家能赢的话当前就不能赢;另一个玩家不能赢,当前就能赢。

因为当前玩家可以通过拿1个或者拿2个来左右结果。

dp[i] = !dp[i-1] || !dp[i-2];

然后滚动数组滚起来。。

public class Solution {
    public boolean firstWillWin(int n) {
        if (n == 0) return false;
        
        boolean[] dp = new boolean[3];
        dp[0] = true;
        dp[1] = true;
        dp[2] = false;
        
        for (int i = 3; i < n; i++) {
            dp[i%3] = !dp[(i-1)%3] || !dp[(i-2)%3];
        }
        
        return dp[(n-1)%3];
    }
}
原文地址:https://www.cnblogs.com/reboot329/p/6206213.html