lintcode-17-子集
子集
给定一个含不同整数的集合,返回其所有的子集
注意事项
子集中的元素排列必须是非降序的,解集必须不包含重复的子集
样例
如果 S = [1,2,3],有如下的解:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]挑战
你可以同时用递归与非递归的方式解决么?
标签
递归 脸书 优步
code
class Solution {
public:
/**
* @param S: A set of numbers.
* @return: A list of lists. All valid subsets.
*/
vector<vector<int> > subsets(vector<int> &nums) {
// write your code here
vector<vector<int> > result;
int size = nums.size();
if(size == 0) {
result.push_back(vector<int> ());
return result;
}
sort(nums.begin(),nums.end());
vector<int> temp;
subset(result, nums, temp, 0, size);
return result;
}
void subset(vector<vector<int> > &result, vector<int> nums, vector<int> temp, int begin, int end) {
result.push_back(temp);
for(int i=begin; i<end; i++) {
temp.push_back(nums[i]);
subset(result, nums, temp, i+1, end);
temp.pop_back();
}
}
};