47. 全排列 II

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

思路:

        与上一题区别是序列里有重复的数字。所以需要横向去重。

        竖向传参去重,横向用函数内set去重

47. 全排列 II_第1张图片

我的代码:

class Solution {
public:
    vector> result;
    vector path;

    vector> permuteUnique(vector& nums) {
        vector used(nums.size(), false);
        backtracking(nums, used);
        return result;
    }
    void backtracking(vector& nums, vector& used)
    {
        if(path.size() == nums.size())
        {
            result.push_back(path);
            return;
        }
        std::unordered_set uset;
        for(int i = 0; i < nums.size(); i++)
        {
            //这个跳过条件调了很长时间
            if(uset.find(nums[i]) != uset.end() || used[i] == true)
            {
                continue;
            }
            uset.insert(nums[i]);
            used[i] = true;
            path.push_back(nums[i]);
            backtracking(nums, used);
            path.pop_back();
            used[i] = false;//used需要回溯            
        }
    }
};

随想录代码:

class Solution {
private:
    vector> result;
    vector path;
    void backtracking (vector& nums, vector& used) {
        // 此时说明找到了一组
        if (path.size() == nums.size()) {
            result.push_back(path);
            return;
        }
        for (int i = 0; i < nums.size(); i++) {
            // used[i - 1] == true,说明同一树枝nums[i - 1]使用过
            // used[i - 1] == false,说明同一树层nums[i - 1]使用过
            // 如果同一树层nums[i - 1]使用过则直接跳过
            if (i > 0 && nums[i] == nums[i - 1] && used[i - 1] == false) {
                continue;
            }
            if (used[i] == false) {
                used[i] = true;
                path.push_back(nums[i]);
                backtracking(nums, used);
                path.pop_back();
                used[i] = false;
            }
        }
    }
public:
    vector> permuteUnique(vector& nums) {
        result.clear();
        path.clear();
        sort(nums.begin(), nums.end()); // 排序
        vector used(nums.size(), false);
        backtracking(nums, used);
        return result;
    }
};

你可能感兴趣的:(leetcode,算法,leetcode)