leetcode 47全排列II

先进行一次排序,然后每次交换的两个数如果一致直接跳过该次循环

class Solution {
public:
    vector<vector<int>> res;
    
    vector<vector<int>> permuteUnique(vector<int>& nums) {
         sort(nums.begin(), nums.end());
        permu(nums,0,nums.size()-1);
        return res;
    }
    void permu(vector<int> nums,int left,int right)
    {
        if(left==right)
            res.push_back(nums);
        else 
        { for(int i=left;i<=right;i++)
            {
                if (i != left && nums[left] == nums[i]) continue;//前后两个数如果一样直接跳过这次
                swap(nums[left],nums[i]);
                permu(nums,left+1,right);
            }
        }
           
    } 
};

 

posted on 2019-02-23 13:31  BigguesD  阅读(96)  评论(0编辑  收藏  举报

导航