当前位置: 首页 > article >正文

LeetCode:47.全排列 II

跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的!
代码随想录

LeetCode:47.全排列 II
给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。
示例 1:
输入:nums = [1,1,2]
输出:
[[1,1,2],
[1,2,1],
[2,1,1]]
示例 2:
输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

使用了used数组进行去重逻辑的判断,需要注意for循环里面的两个if

	public List<List<Integer>> permuteUnique(int[] nums) {
        Arrays.sort(nums);
        List<List<Integer>> res = new ArrayList<>();
        boolean[] used = new boolean[nums.length];
        backtracking(nums, used, new ArrayList(), res);
        return res;
    }

    private void backtracking(int[] nums, boolean[] used, List<Integer> path, List<List<Integer>> res) {
        if (path.size() == nums.length) {
            res.add(new ArrayList(path));
            return;
        }
        for (int i = 0; i < nums.length; i++) {
            // [1,1,2]中以第一个1开头之后,第二个1就不需要了,需要剪枝
            if (i >= 1 && nums[i] == nums[i - 1] && !used[i - 1])
                continue;
            // [1,1,2]中第一个数字取了第一个1之后,递归进行取第二个数的时候,需要排除第一个1
            if (used[i])
                continue;
            path.add(nums[i]);
            used[i] = true;
            backtracking(nums, used, path, res);
            path.removeLast();
            used[i] = false;
        }
    }

http://www.kler.cn/a/510072.html

相关文章:

  • 【JVM中的三色标记法是什么?】
  • 《C++11》中的显式虚函数重载:深入理解与应用
  • ubuntu22.04安装注意点
  • 32单片机综合应用案例——物联网(IoT)环境监测站(四)(内附详细代码讲解!!!)
  • 单元测试与unittest框架
  • SpringBoot+Vue小区智享物业管理系统(高质量源码,可定制,提供文档,免费部署到本地)
  • WPS计算机二级•高效操作技巧
  • TCP TIME-WAIT 状态为什么要坚持 2MSL
  • 【MySQL中InnoDB引擎的行锁是怎么实现的?】
  • 业务幂等性技术架构体系之服务幂等深入剖析
  • Java并发编程:线程安全的策略与实践
  • 查看电脑或笔记本CPU的核心数方法及CPU详细信息
  • AIP-111 平面
  • 2025.1.16——六、BabySQL 双写绕过|联合注入
  • go内存逃逸和GC(垃圾回收)工作原理
  • matlab的eval函数
  • 为AI聊天工具添加一个知识系统 之48 蒙板程序设计(第二版):Respect九宫格【社会形态:治理】
  • 无人机桨叶数量设计科普!
  • [Python学习日记-77] 网络编程中的 socket 开发 —— 基于 TCP 和 UDP 的套接字
  • c++领域展开第十三幕——类和对象(auto、范围for以及string类的初步讲解)超详细!!!!
  • 麒麟服务器安装最新 neo4j/5.9.0 图数据库
  • Vue 项目中引入外部脚本的方式
  • ebno_db_vec 和 num_block_err参数
  • Android BitmapShader实现狙击瞄具十字交叉线准星,Kotlin
  • Nginx 分发策略
  • Rust 中构建 RESTful API