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++ 原来是道数学推理题?

[LeetCode] 810. 黑板异或游戏 Java/C++ 原来是道数学推理题?

LC.810. 黑板异或游戏(异或&数学)

leetcode810. 黑板异或游戏

LeetCode每日一题——810. 黑板异或游戏(博弈问题)