LeetCode-90-Subset II

算法描述:

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<vector<int>> subsetsWithDup(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        vector<vector<int>> results;
        vector<int> temp;
        backtracking(results, nums, temp, 0);
        return results;
    }
    
    void backtracking(vector<vector<int>>& results, vector<int> nums, vector<int>& temp, int index){
        if(temp.size() <= nums.size()){
            results.push_back(temp);
        }else return;
        
        for(int i=index; i <nums.size(); i++){
            if(i >index && nums[i] == nums[i-1]) continue;
            temp.push_back(nums[i]);
            backtracking(results, nums, temp, i+1);
            temp.pop_back();
        }
    }

猜你喜欢

转载自www.cnblogs.com/nobodywang/p/10346308.html
今日推荐