全排列 递归

这道题解法太巧妙了,陈宫绕开了各种重复,而且永远保持分析区间有序。 

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);
            }
        }
    }
};

  

原文地址:https://www.cnblogs.com/dongfangchun/p/7200667.html