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; } }
浙公网安备 33010602011771号