leetcode-47. Permutations II

题目:

Given a collection of numbers that might contain duplicates, return all possible unique permutations.

Example:

Input: [1,1,2]
Output:
[
[1,1,2],
[1,2,1],
[2,1,1]
]

题目描述:

输入一个含有重复数字的序列,返回这些数所能排列出的所有不同的序列。
即含重复数字的全排列。

思路:

依次把每个元素到第一位置,然后递归排列剩下的元素。有一步去重操作

code:

class Solution {
public:
    vector<vector<int>> permuteUnique(vector<int>& nums) {
        vector<vector<int> >res;
        permute_helper(nums,0,res);
        return res;
    }
    bool canSwap(vector<int> &nums, int begin, int end){
        for(int i = begin; i < end; i++)
            if(nums[i] == nums[end])
                return false;
        return true;
    }
    void permute_helper(vector<int>&nums,int now,vector<vector<int> >&res){
        if(now==nums.size()){
            res.push_back(nums);
            return;
        }
        for(int i=now;i<nums.size();++i){
            if(canSwap(nums,now,i)){//如果
                swap(nums,now,i);
                permute_helper(nums,now+1,res);
                swap(nums,now,i);
            }
        }
    }
    void swap(vector<int>&nums,int i,int j){
        int temp=nums[i];
        nums[i]=nums[j];
        nums[j]=temp;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_33278461/article/details/80963254