给出一个具有重复数字的列表,找出列表所有不同的排列
样例
给出列表[1,2,2],不同的排列有:
[
[1,2,2],
[2,1,2],
[2,2,1]
]
class Solution {
public:
/**
* @param nums: A list of integers.
* @return: A list of permutations.
*/
vector<vector<int> > permuteUnique(vector<int> nums) {
vector<vector<int> >res;
if(nums.empty()) return res;
helper(nums,0,res);
return res;
}
bool isduplicated(vector<int>nums,int l,int r){
for(int i=l;i<r;i++){
if(nums[i]==nums[r]) return true;
}
return false;
}
void helper(vector<int>nums,int cur,vector<vector<int>>&res){
if(cur==nums.size()){
res.push_back(nums);
return;
}
// res.push_back(nums);
for(int i=cur;i<nums.size();i++){
if(isduplicated(nums,cur,i)) continue;
swap(nums[i],nums[cur]);
helper(nums,cur+1,res);
swap(nums[i],nums[cur]);
}
}
};