LC 810. 黑板异或游戏
https://leetcode-cn.com/problems/chalkboard-xor-game/
这题必须看题解!
考虑n个值的情况,假设x1,x2,…xn,这时候小红先取
- 假设 S = x1 ^ x2 ^ x3 … xn,
- 如果 S = 0, 那么小红立刻胜出
- 小红唯一输的可能性是:他取任何一个元素之后,剩下的元素异或出来都是0.
- 取走x1剩余异或值是 S ^ x1,取走x2剩余异或值是 S ^ x2 …
- 如果剩余元素异或出来都是0的话,那么(S ^ x1) ^ (S ^ x2) … (S ^ xn), 这个值就是xor(S, n+1).
- 如果xor(S, n+1) = 0,而S!=0, 唯一的可能就是n+1是偶数,也就是n是奇数。
所以如果一开始S!=0的话,如果n是奇数,那么小红肯定会输,否则就是小红胜出。
class Solution: def xorGame(self, nums: List[int]) -> bool: v = 0 for x in nums: v = v ^ x if v != 0 and len(nums) % 2 == 1: return False return True