码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 深搜&回溯&剪枝-全排列


    LCR 083. 全排列 - 力扣(LeetCode)

    根据题意,要根据给定的整数数组,穷举出所有可能的排列,从直观的角度上来看,可以使用多层 for 循环来解决,但如果是数组长度太大的时候,这种方式不太合适。

    对于此类问题,要先画出决策图,例如对于数组 [1,2,3] 而言:

    全局变量:使用全局变量会让方法调用时的参数更加简单;

    1. 使用全局变量 List 数组来存每一个符合要求的排列;

    2. 使用全局变量 List 来暂存每一次遍历的排列值;

    3. 由于需要通过剪枝来去掉一些不符合要求的情况,也就是重复出现数字的情况,因此使用全局变量 boolea[] 来存原始数组的值是否被使用,被使用则为1,否则为0;

    关注递归函数dfs本身:

    使用for循环,结合剪枝来进行排列组合; 

    回溯:每当枚举完一个分支后,要回到分支的主节点,是需要进行回溯的,把全局变量 List 最后一个节点去掉,以及将该节点对应的 boolean[] 中的值由 true 改为 false;

    剪枝:剪掉重复出现数字的情况;

    递归出口:当全局变量 List 的长度等于原始数组的长度,说明已经存满了,就可以直接将当前的 List 存到 全局变量 List数组中; 

    代码实现

    1. class Solution {
    2. List> ret;
    3. List str;
    4. boolean[] judge;
    5. public List> permute(int[] nums) {
    6. ret = new ArrayList<>();
    7. str = new ArrayList<>();
    8. judge = new boolean[nums.length];
    9. dfs(nums);
    10. return ret;
    11. }
    12. public void dfs(int[] nums){
    13. if(str.size() == nums.length){
    14. ret.add(new ArrayList(str)); // 递归出口:符合条件。直接add
    15. }
    16. for(int i=0;i
    17. if(judge[i] == false){ // 剪枝,boolean如果是true说明出现过了,就不再进入了
    18. str.add(nums[i]);
    19. judge[i] = true;
    20. dfs(nums); // 继续递归
    21. // 回溯:将最后一个值去掉,boolean改为false
    22. str.remove(str.size()-1);
    23. judge[i] = false;
    24. }
    25. }
    26. }
    27. }

     

  • 相关阅读:
    Java 8之后的那些新特性(四):网络请求 Java Http Client
    docker中安装并启动rabbitMQ
    vue网页浏览器刷新404问题解决
    pytorch如何将bin格式模型导出pt格式模型?
    nginx服务器
    [极客大挑战 2019]FinalSQL - 异或盲注
    App Inventor 2 实现Ascii码转换(Ascii编码与解码)
    6.swagger完善:界面显示注释+多版本控制
    R语言数据重塑
    训练自己的数据_ArcFace/InsightFace使用自己数据训练人脸识别(2/2)
  • 原文地址:https://blog.csdn.net/weixin_69417428/article/details/134526662
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号