Day72 代码随想录打卡|回溯算法篇---全排列 II

题目(leecode T47):

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

方法:本题全排列与昨天的区别是本题会有重复的元素,但要求结果中不能有重复,即需要进行去重,而这里的去重我们在之前的题目中也接触过,即if (i > 0 && nums[i] == nums[i - 1] && used[i - 1] == false)这里的逻辑如果 used[i - 1] == false即在同一树层上出现过,我们就需要跳过这种情况,因为会发生重复。其他的都和昨天的题目是一样的处理方法。

题解:

class Solution {
private:
    vector<vector<int>> result;
    vector<int> path;
    void backtracking (vector<int>& nums, vector<bool>& used) {
        if (path.size() == nums.size()) {                   //终止条件
            result.push_back(path);
            return;
        }
        for (int i = 0; i < nums.size(); i++) {
            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<vector<int>> permuteUnique(vector<int>& nums) {
        result.clear();
        path.clear();
        sort(nums.begin(), nums.end()); 
        vector<bool> used(nums.size(), false);
        backtracking(nums, used);
        return result;
    }
};

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 21:18:01       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 21:18:01       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 21:18:01       57 阅读
  4. Python语言-面向对象

    2024-07-18 21:18:01       68 阅读

热门阅读

  1. Vue.js 内置指令

    2024-07-18 21:18:01       24 阅读
  2. SSH登录,设置欢迎信息

    2024-07-18 21:18:01       18 阅读
  3. DP讨论——访问者模式

    2024-07-18 21:18:01       23 阅读
  4. 批量调整图片分辨率

    2024-07-18 21:18:01       22 阅读
  5. Scala学习笔记18: Either 类型

    2024-07-18 21:18:01       23 阅读
  6. org.quartz.SchedulerException: Couldn‘t get host name!

    2024-07-18 21:18:01       18 阅读
  7. Linux中的文件夹作用

    2024-07-18 21:18:01       22 阅读
  8. 子树的重心

    2024-07-18 21:18:01       22 阅读