Subsets

来源:互联网 发布:检查网络的命令 编辑:程序博客网 时间:2024/05/16 09:37

题目名称
Subsets—LeetCode链接

描述
Given a set of distinct integers, nums, return all possible subsets.

Note:
Elements in a subset must be in non-descending order.
The solution set must not contain duplicate subsets.
For example,
If nums = [1,2,3], a solution is:

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

分析
  方法很简单,例如给定[4,2,1,0]序列:

  1. 初始化一个二维向量res,用来存储子列,一开始为[[]]。子列中肯定有一个空向量,将其加入到res中,这一步很重要;
  2. 对于给定数字序列,先将首元素加入,res为[[],[4]];
  3. 遍历当前的res,对于每一个res中的每个向量,结尾都增加给定序列中的下一个数字,这里是2(对当前res中所有元素push_back(2)得到[2],[4,2],分别排序就是[2],[2,4]),对这个向量排序并push_back到res中,得到[[],[4],[2],[4,2]];
  4. 重复第3步,直到给定序列中所有元素都被处理。

C++代码

class Solution {public:    vector<vector<int>> subsets(vector<int>& nums) {        vector<vector<int>> res;        int size = nums.size();        if(size==0){            return res;        }        vector<int> zero;        res.push_back(zero);        for(int i=0;i<size;i++){    //一定要用tempSize这个变量来暂存当前res的大小,因为res的size总是动态变化的            int tempSize = res.size();            for(int j=0;j<tempSize;j++){                vector<int> temp(res[j]);                temp.push_back(nums[i]);                sort(temp.begin(),temp.end());                res.push_back(temp);            }        }        return res;    }};

总结
  两个循环就能搞定,因为每次都会用到上次的结果,所以这也算是迭代法的一种。

0 0
原创粉丝点击