算法描述:
Given a collection of integers that might contain duplicates, nums, return all possible subsets (the power set).
Note: The solution set must not contain duplicate subsets.
Example:
Input: [1,2,2]Output:[ [2], [1], [1,2,2], [2,2], [1,2], []]
解题思路:题目要求列出所有可能性,因此用回溯法求解。与前面题目不同,这个题目需要考虑重复元素问题。注意去重是与index开始比较而不是从零开始比较。
vector> subsetsWithDup(vector & nums) { sort(nums.begin(),nums.end()); vector > results; vector temp; backtracking(results, nums, temp, 0); return results; } void backtracking(vector >& results, vector nums, vector & temp, int index){ if(temp.size() <= nums.size()){ results.push_back(temp); }else return; for(int i=index; i index && nums[i] == nums[i-1]) continue; temp.push_back(nums[i]); backtracking(results, nums, temp, i+1); temp.pop_back(); } }