LeetCode题解——黑板异或游戏
- 题目介绍
- 解题思路
- 这题其实只要找对获胜条件,算法实现本身并不难
- alice要获胜只有2种可能,第一种她不是最后一个把数字擦掉的人,换句话说就是她擦掉了倒数第二个数
- 第二种可能轮到alice的回合,剩余的数字正好异或结果为0
- 先看第一种可能,由于Alice先手,也就意味着数组的长度要为偶数,这样Alice才不会成为最后一个擦掉数字的人
- 第二种可能,由于题目告诉了我买每个玩家都使用最优解,也就是说双方都不可能会出现擦掉一个数字剩下的数字异或为0,让对方获胜的可能
- 除非有一种可能就是Alice,还没开始擦第一个数字,最开始数组异或就是0,Alice直接胜利
- 代码示例
class Solution {
public:
bool xorGame(vector<int>& nums) {
int res = 0;
for(auto &x:nums){
res = res^x;
}
if(nums.size()%2 == 0 || res == 0){
return true;
}else{
return false;
}
}
};