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

一、题目描述

二、解题思路

整体思路

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

具体思路

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

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

(2)函数体

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

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

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

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

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

三、代码实现

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];
        }
    }
};
相关推荐
xieliyu.13 小时前
Java算法精讲:双指针(三)
java·开发语言·算法
一条小锦吕*14 小时前
基于Spring Boot + 数据可视化 + 协同过滤算法的推荐系统设计与实现(源码+论文+部署全讲解)
spring boot·算法·信息可视化
如竟没有火炬15 小时前
最大矩阵——单调栈
数据结构·python·线性代数·算法·leetcode·矩阵
8Qi816 小时前
LeetCode 1143 & 718:最长公共子序列 / 最长重复子数组
算法·leetcode·职场和发展·动态规划
绿算技术16 小时前
万卡推理集群存储选型分析:从核心架构到应用视角
大数据·科技·算法·架构
Qt程序员17 小时前
Linux RCU 原理与应用
linux·c++·内核·linux内核·rcu
想吃火锅100517 小时前
【leetcode】1.两数之和js版
javascript·算法·leetcode
qeen8717 小时前
【C++】类与对象之类的默认成员函数(二)
android·c语言·开发语言·c++·笔记·学习
net3m3318 小时前
一阶软件低通滤波器算法
人工智能·算法