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 回溯。由于题目范围小,可以直接暴力解决。
相关推荐
倒头就睡的小比特1 天前
算法竞赛C++常用的STL
c++·算法
小羊没烦恼!1 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
猎头南楼1 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
旖旎夜光2 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
wzdark2 天前
大规模并行计算中的负载均衡算法研究4
算法
Because_of_Her12 天前
并查集-听课笔记
笔记·算法·并查集
码流子2 天前
高速公路安全监测实践:碰撞监测预警+物联网底座,从感知到处置的闭环
大数据·人工智能·物联网·算法·架构
another heaven2 天前
【算法/C++ MD5算法能否逆解码?原理、C++实现与同类哈希算法对比】
c++·算法·哈希算法
wzdark2 天前
从算法设计模式看编程思维的抽象能力4
算法
2601_962218612 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法