题目描述:
给定一个可包含重复数字的序列,返回所有不重复的全排列。
题目解析:
根据题目意思可知,本题采用回溯算法,但是在处理相同数据的时候,需要进行剪枝处理。
class Solution {
public:
void backtrack(vector<vector<int>>& ans, vector<int>& nums, vector<int>& curr, vector<int>& visited){
if(curr.size() == nums.size()){
ans.push_back(curr);
return;
}
for(int i = 0; i < nums.size(); i++){
if(visited[i]) continue;
if(i > 0 && nums[i] == nums[i - 1] && visited[i - 1] == 0) continue; //剪枝处理
curr.push_back(nums[i]);
visited[i] = 1;
backtrack(ans, nums, curr, visited);
curr.pop_back();
visited[i] = 0;
}
}
vector<vector<int>> permuteUnique(vector<int>& nums) {
sort(nums.begin(), nums.end());
vector<vector<int>> ans;
vector<int> curr;
vector<int> visited(nums.size(), 0);
backtrack(ans, nums, curr, visited);
return ans;
}
};
作者:jerry-peng
链接:https://leetcode-cn.com/problems/permutations-ii/solution/hui-su-fa-jian-dan-jian-zhi-by-jerry-peng/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。