LeetCode-47-Permutations II

算法描述:

Given a collection of numbers that might contain duplicates, return all possible unique permutations.

Example:

Input: [1,1,2]
Output:
[
  [1,1,2],
  [1,2,1],
  [2,1,1]
]

解题思路:题目要求返回所有可能的排列,因此首先想到回溯法。这道题的关键点就是去重问题。可以采用标记位来实现去重,但是回溯过程中标记也要一起回溯。

    vector<vector<int>> permuteUnique(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        vector<vector<int>> results;
        vector<int> temp;
        vector<bool> used(nums.size(),false);
        backtrace(nums, results, temp, used);
        return results;
    }
    
    void backtrace(vector<int>& nums, vector<vector<int>>& results, vector<int>& temp, vector<bool>& used){
        if(temp.size()==nums.size()){
            results.push_back(temp);
            return;
        }
        for(int i = 0; i <nums.size(); i++){
            if(used[i] || i >0 && nums[i]==nums[i-1] && !used[i-1]) continue;
            used[i] = true;
            temp.push_back(nums[i]);
            backtrace(nums,results,temp,used);
            temp.pop_back();
            used[i] = false;
        }
    }

 

posted on 2019-01-29 16:50  无名路人甲  阅读(91)  评论(0)    收藏  举报