LeetCode/1025. 除数博弈
1025. 除数博弈
爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。
最初,黑板上有一个数字 N 。在每个玩家的回合,玩家需要执行以下操作:
- 选出任一
x,满足0 < x < N且N % x == 0。 - 用
N - x替换黑板上的数字N。
如果玩家无法执行这些操作,就会输掉游戏。
只有在爱丽丝在游戏中取得胜利时才返回 True,否则返回 false。假设两个玩家都以最佳状态参与游戏。
示例1:
1 | 输入:2 |
示例 2:
1 | 输入:3 |
提示:
1 <= N <= 1000
来源:力扣(LeetCode)
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解:
刚拿到题我是懵逼的,如何将实际的场景转化为数学情景,需要思考一番。参考了官方题解,其实这就是一道数学归纳的题型,我们可以列举前几项的情况,从中找出规律:
1 | N = 1 的时候,区间 (0, 1) 中没有整数是 n 的因数,所以此时 Alice 败。 |
我们可以看到N为奇数的时候 Alice必败,N为偶数的时候 Alice 必胜,该 在N = 1和N = 2时结论成立,假设N = k时成立,则N = k+1时,
- 若
k+1为奇数,则x为奇数,奇减奇得偶,故Bob拿偶,Alice拿奇必败 - 若
k+1为偶数,x可奇可偶,Alice减去一个奇数,则剩下的数为奇数,Alice必胜
具体实现代码如下:
1 | class Solution { |

