题解
算所有的排列,有重复数也差不多,都是用递归法。
大概递归思路:顺序对每个位置,交换当前位置到此后的某位置,进入下一递归,当前位置加一。
Code
void per(vector<int> a, int i, int j, vector<vector<int>> &res){
// 注意这个 a 不是传引用
if(i==j-1){
res.push_back(a);
return;
}
for(int k=i;k<j;k++){
if(k!=i && a[i]==a[k]) continue;// 剔重
swap(a[i],a[k]);
per(a,i+1,j,res);
//swap(a[i],a[k]); 不用这步 想想为什么
}
}
vector<vector<int>> permuteUnique(vector<int>& nums) {
sort(nums.begin(),nums.end());
vector<vector<int>> res;
per(nums,0,nums.size(),res);
return res;
}