【leetcode】【medium】47. Permutations II

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]
]

题目链接:https://leetcode-cn.com/problems/permutations-ii/

思路

法一:回溯法

本题和上题相比,在有数组中有重复值的情况下,需要将排列相同的结果去重。

这里可以利用逻辑判断,对同层里遇到重复的元素时进行剪枝。

class Solution {
public:
    vector<vector<int>> permuteUnique(vector<int>& nums) {
        vector<vector<int>> res;
        if(nums.size()<=0) return res;
        bool visit[nums.size()] = {false};
        return trace(nums, visit);
    }
    vector<vector<int>> trace(vector<int> nums, bool visit[]){
        vector<vector<int>> res;
        unordered_set<int> tmp;
        for (int i = 0; i<nums.size(); ++i){
            if(!visit[i] && tmp.find(nums[i])==tmp.end()){
                tmp.insert(nums[i]);
                visit[i] = true;
                auto vec = trace(nums, visit);
                visit[i] = false;
                if(vec.size()<=0){
                    vector<int> tmp = {nums[i]};
                    res.push_back(tmp);
                }else{
                    for(int j = 0; j<vec.size(); ++j){
                        vec[j].push_back(nums[i]);
                    }
                    res.insert(res.end(), vec.begin(), vec.end());
                }
            }
        }
        return res;
    }
};
发布了126 篇原创文章 · 获赞 2 · 访问量 3721

猜你喜欢

转载自blog.csdn.net/lemonade13/article/details/104517895