Subsets

406 篇文章 0 订阅
406 篇文章 0 订阅

1,题目要求

Given a set of distinct integers, nums, return all possible subsets (the power set).

Note: The solution set must not contain duplicate subsets.

Example:

Input: nums = [1,2,3]
Output:

[
  	[3],
  	[1],
  	[2],
  	[1,2,3],
  	[1,3],
  	[2,3],
  	[1,2],
  	[]
]

给定一组不同的整数,nums,返回所有可能的子集(幂集)。

2,题目思路

对于这道题,所要求的是求出一个集合的所有子集。对于子集的概念,我们都非常清楚,其中空集也是任何集合的子集。

而在实现上,我们可以看到,假如说对于题目所给的1,2,3,子集序列可以是:

  • 1
  • 2
  • 1,2
  • 3
  • 1,3
  • 2,3
  • 1,2,3

经过观察可以得到,对于每个数字,我们每次都将它插入到之前的所有子集中,就可以得到新的子集序列。例如,对于1,此时的子集只有空集,因此,将1插入到空集,就得到1。
对于2,也是一样,将2插入到空集、1,就可以得到2和1,2。3也是同理。

3,代码实现

int x = []() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    return 0;
}();

class Solution {
public:
    vector<vector<int>> subsets(vector<int>& nums) {
        vector<vector<int>> res {{}};
        for(auto &n : nums){
            int currLen = res.size();
            for(int i = 0;i<currLen;i++){
                res.push_back(res[i]);  //将当前已经有的子集再加入到结果最后
                res.back().push_back(n);  //将新的数字插入到原先的每个子集中
            }
        }
        return res;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值