C++ 子集

方法二:迭代法枚举子集

提示 1

一个长度为 n 的数组 nums 有 2

n

个子集(包括空集与自身)。我们可以将这些子集一一映射到 [0,2

n

−1] 中的整数。

提示 2

数组中的每个元素都有「选取」与「未选取」两个状态,可以对应一个二进制位的 1 与 0。那么对于一个长度为 n 的数组 nums,我们也可以用 n 个二进制位的整数来唯一表示每个元素的选取情况。此时该整数第 j 位的取值表示数组第 j 个元素是否包含在对应的子集中。

思路与算法

我们也可以用迭代来实现子集枚举。

根据 提示 1 与 提示 2,我们枚举 [0,2

n

−1] 中的整数 i,其第 j 位的取值表示 nums 的第 j 个元素是否包含在对应的子集中。

对于每个整数 i,我们遍历它的每一位计算对应子集的异或总和,并维护这些值之和。

代码

class Solution {

public:

int subsetXORSum(vector& nums) {

int res = 0;

int n = nums.size();

for (int i = 0; i < (1 << n); ++i){ // 遍历所有子集

int tmp = 0;

for (int j = 0; j < n; ++j){ // 遍历每个元素

if (i & (1 << j)){

tmp ^= numsj;

}

}

res += tmp;

}

return res;

}

};

相关推荐
SunkingYang2 小时前
C++20 vs C++17:新特性对比与用法指南
c++·c++20·特性·版本·新特性·对比·c++17
前进吧-程序员2 小时前
C++20 协程入门实战:从 co_await 到一个 100 行的异步任务调度器
网络·c++·c++20
前进吧-程序员2 小时前
实战:C++20 协程 + io_uring 写一个 400 行的 echo server
网络·c++·c++20
青少儿编程课堂6 小时前
蓝桥杯青少组 + 全国青少年信息素养大赛 + 电子学会图形化考级|校园推箱子大挑战解析
c++·python·算法·bfs·信息学竞赛
多弗朗皮卡丘7 小时前
C++STL之空间配置器
开发语言·c++·内存池·空间配置器
牵猫散步的鱼儿7 小时前
Demosaic 和 Remosaic
c++
CodeYp20197 小时前
第19讲:封装红黑树实现 mymap 和 myset
开发语言·c++·红黑树
孙鹏宇.8 小时前
C++类型转换
c++
超级架构师8 小时前
让 COBOL 长出 AI 大脑:原生 Agent 核心框架 praxo-core 深度剖析
c语言·开发语言·c++·人工智能·python·架构·ai编程