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 小时前
Leetcode 2075. Decode the Slanted Ciphertext
算法·leetcode·职场和发展
Proxy_ZZ06 小时前
用Matlab绘制BER曲线对比SPA与Min-Sum性能
人工智能·算法·机器学习
黎阳之光6 小时前
黎阳之光:以视频孪生领跑全球,赋能数字孪生水利智能监测新征程
大数据·人工智能·算法·安全·数字孪生
小李子呢02116 小时前
前端八股6---v-model双向绑定
前端·javascript·算法
史迪仔01127 小时前
[QML] QML IMage图像处理
开发语言·前端·javascript·c++·qt
前端大波7 小时前
前端面试通关包(2026版,完整版)
前端·面试·职场和发展
2301_822703207 小时前
Flutter 框架跨平台鸿蒙开发 - 创意声音合成器应用
算法·flutter·华为·harmonyos·鸿蒙
zhaoshuzhaoshu8 小时前
人工智能(AI)发展史:详细里程碑
人工智能·职场和发展
cmpxr_8 小时前
【C】数组名、函数名的特殊
c语言·算法
KAU的云实验台8 小时前
【算法精解】AIR期刊算法IAGWO:引入速度概念与逆多元二次权重,可应对高维/工程问题(附Matlab源码)
开发语言·算法·matlab