您的位置:首页 > 其它

#17 Subsets

2016-08-13 12:41 148 查看
题目描述:

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


 Notice


Elements in a subset must be in non-descending order.
The solution set must not contain duplicate subsets.

Have you met this question in a real interview? 

Yes

Example

If S = 
[1,2,3]
, a solution
is:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]


题目思路:

这题和#18很像,不同的是由于给的数组里没有重复元素,我们不需要考虑存在相同subset的情况,直接把sofar放到ans里就好了。

Mycode(AC = 18ms):

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>> ans;
vector<int> sofar;

sort(nums.begin(), nums.end());
subsets(ans, sofar, nums, 0);
return ans;
}

void subsets(vector<vector<int>>& ans,
vector<int>& sofar,
vector<int> &nums,
int idx)
{
if (idx >= nums.size()) {
ans.push_back(sofar);
return;
}

vector<int> tmp = sofar;
// not pick nums[idx]
subsets(ans, tmp, nums, idx + 1);
// pick nums[idx]
tmp.push_back(nums[idx]);
subsets(ans, tmp, nums, idx + 1);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  lintcode recursion subset