题目
Subse
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], [] ]
解析
我的思路是这样的,例如进行到1,2元素,此时vector<vector<int>>中包含的集合有
[
[1]
[2]
[1,2]
[]
]
这个时候将集合中的子集全部添加元素3,得到
[
[1,3]
[2,3]
[1,2,3]
[3]
]
将新得到的这些自己并入之前的集合中,得到[
[1]
[2]
[1,2]
[]
[1,3]
[2,3]
[1,2,3]
[3]
]
这就是1,2,3元素的全部子集。同样的对元素4一样的操作。迭代的思路也非常清晰。
代码如下
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
sort(nums.begin(),nums.end());
vector<vector<int>> ret;
vector<int> in;
ret.push_back(in);
for (int i = 0; i<nums.size(); i++)
{
int size = ret.size();
for (int j=0 ;j<size;j++)
{
vector<int> in(ret[j]);
in.push_back(nums[i]);
ret.push_back(in);
}
}
return ret;
}
};
个人觉得这是最满意的一次刷题了。思路清晰,代码简洁。
大神的代码看了一下,看不下去。就这样呗。