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];
        }
    }
};
相关推荐
小草cys1 分钟前
基于大模型的图像目标检测及跟踪算法
人工智能·算法·目标检测
代码游侠13 分钟前
C语言核心概念复习(三)
开发语言·数据结构·c++·笔记·学习·算法
明洞日记19 分钟前
【软考每日一练030】软件维护:逆向工程与再工程的区别与联系
c++·软件工程·软考·逆向工程
池央19 分钟前
贪心算法-递增的三页子序列
算法·贪心算法
lrh12280019 分钟前
详解K近邻(KNN)算法:原理、实现与优化
算法·机器学习
郝学胜-神的一滴26 分钟前
深入Linux网络编程:accept函数——连接请求的“摆渡人”
linux·服务器·开发语言·网络·c++·程序人生
程途拾光15828 分钟前
算法公平性:消除偏见与歧视的技术探索
大数据·人工智能·算法
茉莉玫瑰花茶28 分钟前
C++ 17 详细特性解析(3)
开发语言·c++
秋风战士29 分钟前
无线通信算法之340:信道均衡除法定标讨论
算法·fpga开发·信息与通信
沧澜sincerely32 分钟前
蓝桥杯算法练习
算法·职场和发展·蓝桥杯