回溯算法

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;
    }
};
posted @ 2025-04-05 22:53  韩熙隐ario  阅读(13)  评论(0)    收藏  举报