您的位置:首页 > 其它

Subsets

2015-11-03 10:51 316 查看
题目名称

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]序列:

初始化一个二维向量res,用来存储子列,一开始为[[]]。子列中肯定有一个空向量,将其加入到res中,这一步很重要;

对于给定数字序列,先将首元素加入,res为[[],[4]];

遍历当前的res,对于每一个res中的每个向量,结尾都增加给定序列中的下一个数字,这里是2(对当前res中所有元素push_back(2)得到[2],[4,2],分别排序就是[2],[2,4]),对这个向量排序并push_back到res中,得到[[],[4],[2],[4,2]];

重复第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;
}
};


总结

  两个循环就能搞定,因为每次都会用到上次的结果,所以这也算是迭代法的一种。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode