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

一、题目描述

二、解题思路

整体思路

画出决策树模拟解决这个问题,可以采用回溯法+全局变量的方法来解决这个问题。

具体思路

本题是子集问题的变式,决策树与leetcode 78 子集-CSDN博客一样;

(1)函数功能:dfs函数用于实现nums数组从start位置开始的所有子集的异或值;

(2)函数体

<1>由于决策树从空集开始(空集也为子集),所以在一开始就更新返回值;

<2>i从start开始,当i越界时跳出循环;

<3>处理当前位置,将nums[i]与path异或,修改path的值;

<4>处理完当前位置后,dfs处理i+1位置的元素;

<5>回溯,**由位运算异或法则:a^a=0,0^a=a,**可知恢复现场时,只需要将path与nums[i]再异或即可;

三、代码实现

cpp 复制代码
class Solution {
    int sum;
    int path;
public:
    int subsetXORSum(vector<int>& nums) {
        sum=0;path=0;
        dfs(nums,0);
        return sum;
    }
    void dfs(vector<int> nums,int start){
        //更新结果
        sum+=path;
        for(int i=start;i<nums.size();i++){
            path^=nums[i];
            dfs(nums,i+1);
            //恢复现场
            path^=nums[i];
        }
    }
};
相关推荐
我真不会起名字啊6 分钟前
C、C++中的sprintf和stringstream的使用
java·c语言·c++
猿饵块11 分钟前
ros2--图像/image
c++
资深web全栈开发18 分钟前
LeetCode 3625. 统计梯形的数目 II
算法·leetcode·组合数学
橘颂TA19 分钟前
【剑斩OFFER】算法的暴力美学——外观数列
算法·leetcode·职场和发展·结构与算法
Liangwei Lin21 分钟前
洛谷 P1434 [SHOI2002] 滑雪
算法
c#上位机38 分钟前
halcon图像增强之自动灰度拉伸
图像处理·算法·c#·halcon·图像增强
rit843249941 分钟前
压缩感知信号恢复算法:OMP与CoSaMP对比分析
数据库·人工智能·算法
天才测试猿44 分钟前
Postman中变量的使用详解
自动化测试·软件测试·python·测试工具·职场和发展·接口测试·postman
Pluchon1 小时前
硅基计划4.0 算法 FloodFill算法
java·算法·leetcode·决策树·逻辑回归·深度优先·图搜索算法
菜鸟233号2 小时前
力扣347. 前k个高频元素 java实现
算法