题目描述:https://leetcode.cn/problems/divisor-game/description/
题目描述
爱丽丝和鲍勃一起玩游戏,他们轮流行动,爱丽丝先手开局。
最初,黑板上有一个数字 n
。在每个玩家的回合,玩家需要执行以下操作:
选出任一 x
,满足 0 < x < n
且 n % x == 0
。
用 n - x
替换黑板上的数字n
。
如果玩家无法执行这些操作,就会输掉游戏。
只有在爱丽丝在游戏中取得胜利时才返回 true
。假设两个玩家都以最佳状态
参与游戏。
示例 1
输入:n = 2
输出:true
解释:爱丽丝选择 1,鲍勃无法进行操作。
示例 2
输入:n = 3
输出:false
解释:爱丽丝选择 1,鲍勃也选择 1,然后爱丽丝无法进行操作。
提示
- 1 <= n <= 1000
Code
解法一:数学思维
很明显根据题目解释和示例,我们可以知道:
1.一个数如果是奇数,使得它被取余后为0
的最小数是1
这一个数且奇数X奇数=奇数
恒定成立,所以我们可以使得奇数的下一步一定变为偶数
2.一个数如果是偶数,使得它被取余后为0
的最大数是n/2
,依次规律一直操作迟早会使其变成奇数或在此之前得出结果,但是我们始终可以使得偶数的下一步一定变为奇数
3.无论进行多少次操作都会最终在2
和3
这两个数得出结果
4.因为双方都是最佳操作,所以当n为奇数
的时候,我们无论怎么操作,对方都可以把最终结果限定在3
,所以我们是必输;当n为偶数
的时候,我们无论怎么操作都可以把最终结果限定在2
,所以我们是必赢
class Solution {
public boolean divisorGame(int n) {
if (n % 2 == 0) {
return true;
}
return false;
}
}