这道题解法太巧妙了,陈宫绕开了各种重复,而且永远保持分析区间有序。
class Solution {
public:
vector<vector<int>> permuteUnique(vector<int>& nums) {
sort(nums.begin(),nums.end());
vector<vector<int>> retArr;
fun(retArr,nums,0);
return retArr;
}
void fun(vector<vector<int>>& retArr,vector<int> nums,int idxBegin)
{
if(idxBegin>=nums.size()-1){
retArr.push_back(nums);
return;
}
fun(retArr,nums,idxBegin+1);
for(int iLoop = idxBegin+1;iLoop<nums.size();iLoop++){
if(nums[idxBegin]!=nums[iLoop]){
swap(nums[iLoop],nums[idxBegin]);
fun(retArr,nums,idxBegin+1);
}
}
}
};