这道题解法太巧妙了,陈宫绕开了各种重复,而且永远保持分析区间有序。 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); } } } };