leetcode 47. 全排列 II(Permutations II)

题目描述:

给定一个可包含重复数字的序列,返回所有不重复的全排列。

示例:

输入: [1,1,2]
输出:
[
  [1,1,2],
  [1,2,1],
  [2,1,1]
]

解法:

class Solution {
public:
    vector<vector<int>> permute(vector<int>& nums){
        vector<vector<int>> res;
        int sz = nums.size();
        if(sz == 0){
            return res;
        }else if(sz == 1){
            return {nums};
        }else{
            for(int i = sz-1; i >= 0; i--){
                if(i < sz-1 && nums[i] == nums[i+1]){
                    continue;
                }
                vector<int> lst(nums.begin(), nums.begin() + i);
                lst.insert(lst.end(), nums.begin() + i+1, nums.end());
                vector<vector<int>> tmp = permute(lst);
                int len = tmp.size();
                for(int j = 0; j < len; j++){
                    vector<int> _lst = tmp[j];
                    _lst.push_back(nums[i]);
                    res.push_back(_lst);
                }
            }
            return res;
        }
    }
    
    vector<vector<int>> permuteUnique(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        return permute(nums);
    }
};

猜你喜欢

转载自www.cnblogs.com/zhanzq/p/10697521.html