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

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

🧩 题目描述

给定一个数组 nums,我们要找到所有子集的异或总和,并返回这些总和的累加值。

  • 子集可以为空
  • 异或总和是所有元素逐位 XOR 的结果
  • 数组中元素唯一,长度最大为 12

示例:

输入: nums = 1,3 输出: 6 解释: 子集有 \[\], 1, 3, 1,3 异或值分别为 0, 1, 3, 1^3=2 总和为 0+1+3+2 = 6

python

复制

编辑

💡 解题思路

这道题的关键是遍历所有子集,然后计算它们的异或值并求和。由于数组最大长度是 12,最多只有 2^12 = 4096 个子集,因此我们可以放心使用回溯法(DFS)枚举所有可能。

🧾 算法核心:

  • 从 index=0 开始,对每个元素有两种选择:选或不选
  • 通过递归实现所有子集的遍历
  • 每当遍历到终点时,就将当前子集的异或值加到答案里

🧪 代码实现(Python)

python 复制代码
class Solution:
    def subsetXORSum(self, nums: List[int]) -> int:
        def dfs(index, cur_xor):
            if index == len(nums):
                return cur_xor
            # 不选 nums[index]
            a = dfs(index + 1, cur_xor)
            # 选 nums[index]
            b = dfs(index + 1, cur_xor ^ nums[index])
            return a + b

        return dfs(0, 0)
✅ 复杂度分析
时间复杂度:O(2^n),n 是数组长度(最多 12)

空间复杂度:O(n),递归深度最多为 n

🏁 总结
这是一道典型的枚举所有子集的题目,思路清晰,适合练习 DFS 回溯。由于题目范围小,可以直接暴力解决。
相关推荐
小O的算法实验室5 小时前
IEEE TAES,基于DQN 辅助的集群无人机自组网约束多目标重构与优化
人工智能·算法
_不会dp不改名_6 小时前
leetcode_3727 最大平方交替和
linux·算法·leetcode
信奥卷王6 小时前
[GESP202509 六级] 货物运输(含视频)
算法
余额瞒着我当琳6 小时前
C++算法学习篇5--二分查找法
c++·学习·算法
起个名字费劲死了6 小时前
基于灰度/形状的2D模板匹配
算法
杜 硕6 小时前
归并排序详解
数据结构·算法·排序算法
科技观察哨7 小时前
国产纳米定位平台与精密位移台量产能力图谱(2026):Z轴压电、XYθZ、六自由度并联与光刻/检测/装配选型指南
网络·人工智能·算法
鶴哥只手遮天8 小时前
《OpenFOAM 源码深度剖析》系列-第 3 章 字典系统、IO 体系与对象注册表
算法·开源
鶴哥只手遮天8 小时前
《OpenFOAM 源码深度剖析》系列-第 2 章 wmake:OpenFOAM 自研构建系统与编译配置体系
算法·开源
用户81849100742168 小时前
我把工位上的“AI牛马”养成了:一个技术人的 AiPy 实战手记
算法