0%

leetcode每日一题-除数博弈

除数博弈

image1

方法一:找规律

多举几个例子就可以发现当N为奇数时,Alice一定输,当N为偶数时,Alice一定赢。可以使用数学归纳法证明:

  • N=1,2时,结论成立。
  • 当N>2时,假设N<=k结论成立,当N=k+1时:
    1. 如果k为偶数,那么k+1为奇数,那么k+1的因数一定也为奇数,奇数减奇数为偶数,那么轮到Bob时就为偶数,根据假设,在N<=k时Bob先手如果是偶数,那么Bob必胜,Alice必输。
    2. 如果k为奇数,那么k+1为偶数,因数可以为奇数也可以为偶数,如果Alice选择奇数,那么轮到Bob时就为奇数,根据假设,在N<=k时Bob先手如果是奇数,那么Bob必输,Alice必胜。
1
class Solution {
2
    public boolean divisorGame(int N) {
3
        return N%2 == 0;
4
    }
5
}

复杂度分析

  • 时间复杂度:$O(1)$。
  • 空间复杂度:$O(1)$。