LeetCode 1025.除数博弈(C/C++)

题目来自力扣(LeetCode)

题目描述

爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。
最初,黑板上有一个数字N。在每个玩家的回合,玩家需要执行以下操作:

  • 选出任一 x,满足 0 < x < NN % x == 0
  • N - x替换黑板上的数字 N

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

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

示例与提示

示例 1:

输入:2
输出:true
解释:爱丽丝选择 1,鲍勃无法进行操作。

示例 2:

输入:3
输出:false
解释:爱丽丝选择 1,鲍勃也选择 1,然后爱丽丝无法进行操作。

提示:

1 <= N <= 1000

分析

游戏开始时,
假设N=1,爱丽丝失败;
假设N=2,她可以选择x=1,来使鲍勃遇到的N=2-1=1,无法操作,爱丽丝获胜;
假设N=3,她只能选择x=1,鲍勃遇到的N=2,鲍勃获胜;
假设N=4,她可以选择x=1,来使鲍勃遇到的N=3,爱丽丝获胜;
······
奇数的因子只能是奇数,偶数的因子可以是奇数或偶数。
LeetCode 1025.除数博弈(C/C++)_第1张图片

  • 当爱丽丝遇到的N是偶数时,她总可以选到一个N的奇数因子x(比如1),
    使得传给对方的N-x为奇数,而对方遇到奇数N,只能选择N的奇数因子x,
    又会将偶数的N-x传回给爱丽丝,最终爱丽丝会遇到N=2,然后获胜。
  • 当爱丽丝遇到的N是奇数时,只能传给对方偶数或无法操作(N=1),无法获胜。

代码

C/C++

//C++
class Solution {
public:
    bool divisorGame(int N) {
        return N % 2 == 0;  //N为偶数时返回true,为奇数时返回false
    }
};

你可能感兴趣的:(LeetCode)