leetcode 78. 子集

给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

说明:解集不能包含重复的子集。

示例:

输入: nums = [1,2,3]
输出:
[
  [3],
  [1],
  [2],
  [1,2,3],
  [1,3],
  [2,3],
  [1,2],
  []
]

 1 class Solution {
 2 public:
 3     vector<vector<int>> subsets(vector<int>& nums) {
 4         vector<vector<int>> ans(1);
 5         for(int i = 0; i < nums.size(); i++){
 6             int len = ans.size();//一定要在循环外面确定ans的大小,在循环中ans的大小是变化的
 7             for(int j=0; j < len; j++){
 8                 ans.push_back(ans[j]);//复制之前ans中的所有元素
 9                 ans.back().push_back(nums[i]); //在复制的项后面添加nums[i]
10             }
11         }
12         return ans;
13     }
14 };

每一个元素有两种状态,在子集中,和不在子集中

上面的算法就是遵循这样的思维,首先申明一个大小为1的ans,然后复制这个空的vector,把nums[i]添加到这个vector中,这样就实现了nums[i]的两种状态,此时ans=[[],[1]];重复这样的过程就能求到nums的所有子集

有疑惑或者更好的解决方法的朋友,可以联系我,大家一起探讨。qq:1546431565
原文地址:https://www.cnblogs.com/mr-stn/p/8997624.html