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];
        }
    }
};
相关推荐
Wadli3 分钟前
26.单调栈
算法
晨曦夜月5 分钟前
进程的五大状态及特殊进程解析
linux·服务器·算法
24白菜头9 分钟前
【无标题】
c++·笔记·学习·harmonyos
吟安安安安10 分钟前
适合短期冲刺的学习工作流(针对算法)
学习·算法
科研前沿15 分钟前
什么是时空融合技术?
大数据·人工智能·数码相机·算法·重构·空间计算
AI科技星19 分钟前
全域数学本源公理:0、1、∞ 三者核心关系 (典籍定稿版)
人工智能·算法·数学建模·数据挖掘·量子计算
AI科技星24 分钟前
全域数学·第卷:场计算机卷(场空间计算机)【乖乖数学】
java·开发语言·人工智能·算法·机器学习·数学建模·数据挖掘
Deepoch26 分钟前
数学模型驱动:Deepoc 低幻觉数学大模型助力发动机全周期智能优化
人工智能·算法·机器学习·deepoc·数学大模型·低幻觉
charlie11451419131 分钟前
嵌入式C++实践开发第21篇(单片机实践):按钮输入 —— 硬件原理、消抖与HAL API
开发语言·c++·单片机
嘻嘻哈哈樱桃35 分钟前
牛客经典101题解题集--贪心算法+模拟
java·python·算法·贪心算法