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);
}
};