Subsets
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.
If nums =
[1,2,3]
, a solution is:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]
Hide Tags
Array Backtracking Bit Manipulation
注意要求,需要先对输入的数据排个序。
然后依次组合即可。
至于bit操作,应该是每个bit位表示输入的vector里的对应的数字是否被选中,
但是需要考虑bit的长短,移位会不会溢出等等,实际上并不是非常完美的一个选择。
讨论区里有用bit解这道题的,case应该是都通过了,但这个问题还是存在的。(参考帖子)
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> rst;
vector<int> buf;
rst.push_back(buf);
int sz = nums.size();
if(sz)
{
sort(nums.begin(), nums.end());
for(int nn=1; nn<=sz; ++nn) //依次创建从1一个元素到sz个元素的所有组合
build(nums, sz, rst, buf, nn, 0, 0);
}
return rst;
}
void build(vector<int>& nums, int sz, vector<vector<int>>& rst,
vector<int>& buf, int count, int taken, int start)
{
if(taken==count)
rst.push_back(buf);
else
{
int end=sz-count+taken;
for(int ii=start; ii<=end; ++ii)
{
buf.push_back(nums[ii]);
build(nums, sz, rst, buf, count, taken+1, ii+1);
buf.pop_back();
}
}
return;
}
};
8 ms.
No comments:
Post a Comment