回溯算法
1 - 1863. 找出所有子集的异或总和再求和
Problem:
思路
关键是列出所有子集
Code
class Solution {
public:
int res;
int n;
// 深度优先搜索函数
void dfs(int val, int idx, vector<int>& nums){
// 终止条件:当遍历完所有数字时
if (idx == n){
// 将当前异或和累加到结果中
res += val;
return;
}
// 选择当前数字,更新异或和,并递归调用dfs
dfs(val ^ nums[idx], idx + 1, nums);
// 不选择当前数字,保持异或和不变,并递归调用dfs
dfs(val, idx + 1, nums);
}
int subsetXORSum(vector<int>& nums) {
// 初始化结果为0
res = 0;
// 获取数组的长度
n = nums.size();
// 从异或和为0,索引为0开始深度优先搜索
dfs(0, 0, nums);
return res;
}
};