JZX轻语:简

LeetCode 1863 - 找出所有子集的异或总和再求和

发表于2025年04月05日

#回溯

简单的回溯模板题,在backtrace函数中,我们需要遍历所有可能的子集,并计算它们的异或和。我们可以通过递归来实现这个过程,每次递归时,我们有两个选择:选择当前元素或者不选择当前元素。最终,我们将所有子集的异或和相加,得到结果。

class Solution {
public:
    int result {0};
    vector<int> nums;
    int subsetXORSum(vector<int>& nums) {
        this->nums = std::move(nums);
        backtrace(0, 0);
        return result;
    }
    void backtrace(int pos, int cur_xor_result) {
        if (pos == nums.size()) {
            result += cur_xor_result;
            return;
        }
        // 选择当前元素
        backtrace(pos + 1, cur_xor_result ^ nums[pos]);
        // 不选择当前元素
        backtrace(pos + 1, cur_xor_result);
    }
};

闪念标签:LC

题目链接:https://leetcode.cn/problems/sum-of-all-subset-xor-totals/