
子集(LeetCode 78)
确定集合的长度 n。 生成从 0 到 2^n - 1 的所有数字。 对于每个数字 i,检查其二进制表示的每一位: 将这些元素组成一个子集,并将该子集添加到结果中。 初始化结果集合: 确定集合长度: 生成所有可能的子集: 生成子集内容: 检查每一位: 添加元素到子集: 将子集添加到结果:
发布日期:2021-05-08 05:22:13
浏览次数:20
分类:精选文章
本文共 1051 字,大约阅读时间需要 3 分钟。
LeetCode 78:生成所有子集
给定一个包含互不相同元素的集合,返回它的所有子集。结果不能包含相同的子集。
思路
我们可以利用二进制数的特性来生成所有可能的子集。每个二进制数的每一位表示是否包含集合中的一个元素。例如,集合 {1, 2, 3} 中的数字 3(二进制 11)表示包含元素 1 和 2。
具体步骤如下:
- 如果第 j 位为 1,则包含集合中对应的元素 nums[j]。
解决代码
#includeusing namespace std;vector > subsets(vector nums) { vector > res; int n = nums.size(); for (int i = 0; i < (1 << n); ++i) { vector temp; for (int j = 0; j < n; ++j) { if (i >> j & 1) { temp.push_back(nums[j]); } } res.push_back(temp); } return res;}
代码解释
vector<vector<int>> res;
用于存储所有子集。int n = nums.size();
获取集合的大小。for (int i = 0; i < (1 << n); ++i)
,循环从 0 到 2^n - 1。vector<int> temp;
作为临时存储子集的空间。for (int j = 0; j < n; ++j)
,检查 i 的第 j 位是否为 1。if (i >> j & 1)
,如果第 j 位为 1,则将 nums[j] 添加到 temp。res.push_back(temp);
。这种方法通过生成所有可能的二进制数来构建子集,确保每个子集都是唯一的,时间复杂度为 O(n * 2^n),适用于小规模的集合。
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2025年05月01日 07时49分11秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
看明白这两种情况,才敢说自己懂跨链! | 喵懂区块链24期
2019-03-07
python中列表 元组 字典 集合的区别
2019-03-07
Android DEX加固方案与原理
2019-03-07
iOS_Runtime3_动态添加方法
2019-03-07
Leetcode第557题---翻转字符串中的单词
2019-03-07
Problem G. The Stones Game【取石子博弈 & 思维】
2019-03-07
Java多线程
2019-03-07
openssl服务器证书操作
2019-03-07
我用wxPython搭建GUI量化系统之最小架构的运行
2019-03-07
我用wxPython搭建GUI量化系统之多只股票走势对比界面
2019-03-07
selenium+python之切换窗口
2019-03-07
重载和重写的区别:
2019-03-07
搭建Vue项目步骤
2019-03-07
账号转账演示事务
2019-03-07
idea创建工程时错误提醒的是architectCatalog=internal
2019-03-07
SpringBoot找不到@EnableRety注解
2019-03-07
简易计算器案例
2019-03-07
在Vue中使用样式——使用内联样式
2019-03-07