码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • LeetCode HOT 100 —— 49.全排列


    题目

    给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
    在这里插入图片描述

    思路

    同代码随想录回溯算法 —— 全排列,一眼回溯,直接上

    回溯三部曲:

    1. 递归函数参数:排列是有序的,即[1,2] 和[2,1]是两个不同的集合,可以看到元素1在[1,2]中已经使用过了,但是在[2,1]中还要继续使用一次1,所以处理排列问题就不需要startIndex了
    2. 递归终止条件:收集的叶子结点就是最终的结果,所以当到达叶子节点时,即path数组大小等于nums数组时,说明找到了一个全排列
    if(path.size() == nums.length){
    	result.add(path);
    	return;
    }
    
    • 1
    • 2
    • 3
    • 4
    1. 单层搜索的逻辑:排列问题和之前的组合问题、切割问题、子集问题最大的不同就是for循环里面不需要使用startIndex了,因为排列问题每次都需要重头开始搜索

    依旧是回溯模板:

    result = []
    backtrack(路径, 选择列表):
        if 满足结束条件:
            result.add(路径)
            return
        
        for 选择 in 选择列表:
            做选择
            backtrack(路径, 选择列表)
            撤销选择
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    java代码如下:

    class Solution{
    	public List<List<Integer>> permute(int[] nums){
    		List<List<Integer>> res = new ArrayList<>();
    		List<Integer> path = new ArrayList<>();
    		backTracking(res,path,nums);
    		return res;
    	}
    	public void backTracking(List<List<Integer>> res, List<Integer> path, int[] nums){
    		if(path.size() == nums.length){
    			res.add(new ArrayList<>(path));
    			return;
    		}
    		for(int num : nums){
                if(!path.contains(num)){
                    path.add(num);
                    backTracking(res,path,nums);
                    path.remove(path.size() - 1);
                }
    		}
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
  • 相关阅读:
    springboot实现简单的注册登录功能
    二次封装View Design的table组件,实现宽度自适应,内容在一行展示
    SpringBoot SpringCloud Nacos等一些组件版本对应
    小巧有劲的按摩好手,能装兜里的护理工具,小鸟斗士筋膜枪体验
    完美十进制数——去年天梯校赛
    题库API 大学公众号题库API 网课查题题库接口API接口
    打造顶尖微服务项目!解锁四种持久化工具的酸爽奇迹!
    .NET分布式Orleans - 4 - 计时器和提醒
    2.X3-解析器语义动作
    自动化输出带数据的文件名称
  • 原文地址:https://blog.csdn.net/qq_39473176/article/details/128065518
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号