除数博弈
方法一:找规律
多举几个例子就可以发现当N为奇数时,Alice一定输,当N为偶数时,Alice一定赢。可以使用数学归纳法证明:
- N=1,2时,结论成立。
- 当N>2时,假设N<=k结论成立,当N=k+1时:
- 如果k为偶数,那么k+1为奇数,那么k+1的因数一定也为奇数,奇数减奇数为偶数,那么轮到Bob时就为偶数,根据假设,在N<=k时Bob先手如果是偶数,那么Bob必胜,Alice必输。
- 如果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)$。