这次对这种类型的题目想了很多,收获很大,得到了一张图。
特别感谢水中的鱼的这两篇博文。
http://fisherlei.blogspot.com/2013/01/leetcode-subsets.html
http://fisherlei.blogspot.com/2013/01/leetcode-subsets-ii.html
代码如下:
class Solution {
public:
void dfs(vector<int>& nums, int start, int length , vector<int> &output, vector<vector<int>> &result) {
if(start == length)
return;
for(int i = start; i < length; i++) {
if((i > start) && (nums[i] == nums[i - 1]))
continue;
output.push_back(nums[i]);
result.push_back(output);
dfs(nums, i + 1, length, output, result);
output.pop_back();
}
}
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
sort(nums.begin(), nums.end());
int length = nums.size();
vector<int> output;
vector<vector<int>> result;
result.push_back(output);
dfs(nums, 0, length , output, result);
return result;
}
};