[LeetCode] 1025. 除数博弈

151 阅读1分钟

1025. 除数博弈

Easy

思路

拿到题目一脸懵逼,还是只能硬着头皮慢慢分析

F(1): 操作不了,谁拿谁输
F(2):
A先拿,只能拿1, 变成F(1), BF(3):
A只能拿1,变F(2), 轮到BAF(4)
两种情况:A可以拿1,可以拿2
A1,变F(3), B1,变F(2), ABA2,变F(2), AB

结论:

  • 对于F(4)这种情况,A要让自己赢的话,肯定是拿1
  • 谁拿F(2)谁就可以赢
  • 对于N是奇数的情况,拿的约数只能是奇数,这样的话剩下的是偶数
  • 对于N是偶数的情况,约数可以选奇数,也可以选偶数。想让自己赢的话,保证让对方去拿基数,拿到自己这边就必然是偶数。升到最后自己这边剩下2就能必赢了
  • 所以答案取决于N的奇偶,应为Alice先拿,所以初始为偶数Alice必赢

代码

python3

class Solution:
    def divisorGame(self, N: int) -> bool:
      return N % 2 == 0