LeetCode 810 黑板异或游戏[数学 异或] HERODING的LeetCode之路
Posted HERODING23
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 810 黑板异或游戏[数学 异或] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。
解题思路:
困难+异或,下意识想到动态规划,没想到竟然只是纯粹的数学题目,留下了不争气的泪水。。。
言归正传,这确实是一道标准的数学题,或者说是推理题目,不能先入为主,给题目带跑偏了,因为你不知道什么才是最优情况,在该题中,可能同时最优情况有数百种,只有一种是错误的选择,所以我们只能分析。首先就是初始值异或结果是0,那么Alice直接获胜,接着考虑奇偶性问题,这就需要数学的推导了,假设 Alice面临失败的状态,则只有一种情况,即无论擦掉哪一个数字,剩余所有数字的异或结果都等于 0,那么这是否成立呢?
是不是就茅塞顿开了?也就是说只要是偶数,Alice总能立于不败之地,但是如果是后手,情况就反过来了,代码如下:
class Solution {
public:
bool xorGame(vector<int>& nums) {
int flag = 0, numsSize = nums.size();
//首先将nums数组中的所有元素进行异或
for (const auto &num : nums){
flag ^= num;
}
//只有当小红一上场就赢,或者nums的大小为偶数,小红才能赢
if(flag == 0 || numsSize % 2 == 0){
return true;
}
return false;
}
};
以上是关于LeetCode 810 黑板异或游戏[数学 异或] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章
[LeetCode] 810. 黑板异或游戏 Java/C++ 原来是道数学推理题?
[LeetCode] 810. 黑板异或游戏 Java/C++ 原来是道数学推理题?