1025. 除数博弈

爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。

最初,黑板上有一个数字 n 。在每个玩家的回合,玩家需要执行以下操作:

  • 选出任一 x,满足 0 < x < n 且 n % x == 0 。
  • 用 n - x 替换黑板上的数字 n 。

如果玩家无法执行这些操作,就会输掉游戏。

只有在爱丽丝在游戏中取得胜利时才返回 true 。假设两个玩家都以最佳状态参与游戏。

示例 1:

ini 复制代码
输入: n = 2
输出: true
解释: 爱丽丝选择 1,鲍勃无法进行操作。

示例 2:

ini 复制代码
输入: n = 3
输出: false
解释: 爱丽丝选择 1,鲍勃也选择 1,然后爱丽丝无法进行操作

题解:

js 复制代码
/**
 * @param {number} n
 * @return {boolean}
 */
// 方法一:
// 不管N是几,假如N是一个偶数,我就选x = 1,那n - x必然是奇数,我就获胜;
// 假如N是一个奇数,我没得选直接就输了。
var divisorGame = function (n) {
    return n % 2 == 0
};
// 方法二:动态规划
var divisorGame = function (n) {
    const dp = new Array(n + 1).fill(false)
    dp[2] = true
    for (let i = 3; i <= n; i++) {
        for (let j = i; j < i; j++) {
            // 当前位置前一位[i - j] 为false时当前为才为true
            if (i % j === 0 && !dp[i - j]) {
                dp[i] = true
                break
            }
        }
    }
    return dp[n]
};
相关推荐
冻柠檬飞冰走茶42 分钟前
字母移动游戏题解:贪心求最长可保留连续子串(附 C 实现)
c语言·开发语言·数据结构·算法·动态规划
雪落漂泊1 小时前
C++算法 二分查找篇(上)
开发语言·c++·算法
LabVIEW开发3 小时前
LabVIEW 连接板:28 个端子怎么排,优先级怎么定
java·算法·labview
严肃小白兔4 小时前
MATLAB 数值计算中的精度与误差问题:浮点运算、误差传播与数值稳定性
人工智能·算法·matlab
青少儿编程课堂5 小时前
蓝桥杯青少组图形化省考报名倒计时·全国青少年信息素养大赛·电子学会图形化考级:校园黑白棋人机对战解析
c++·python·算法·bfs·信息学竞赛
jktantan6 小时前
注解式脱敏:用 Jackson 的 ContextualSerializer 做字段级策略(一)
spring boot·后端·算法·spring cloud·系统架构
Dream it possible!19 小时前
LeetCode 面试经典 150_多维动态规划_交错字符串(97_C++_中等)
算法·leetcode·面试·动态规划
心抵鹊19 小时前
算法之双指针系列(一)
算法·leetcode
十二19 小时前
【洛谷题解】P1083 [NOIP 2012 提高组] 借教室(二分答案 + 差分)
数据结构·c++·算法·蓝桥杯
小此方20 小时前
[算法实战论:动态规划]回文串问题的dp解法,回文串问题的母题,以及以此为基础的派生题
算法·动态规划