回溯算法篇-01:全排列

news2024/9/28 1:26:17

力扣46:全排列

 

排列和组合的区别在于,排列对“顺序”有要求。比如 [1,2] 和 [2,1] 是两个不同的结果。

这就导致了同一个元素 在同一条路径中不可重复使用,在不同的路径中可以重复使用。 

比如数组 [1,2,3] ,在第一条路径 [1,2,3]中,1只能出现一次。但是在另一条选择路径 [2,1,3] 中,1或者在其他路径中出现过的元素仍然可以继续使用。

为了保证 “同一元素在一条路径中只能使用一次” ,我们需要额外维护一个boolean数组用于记录元素的使用情况:已经使用过的元素标记为 “true” ,没有使用过的元素标记为 “false”;

套用框架:

class Solution {
    //用于存放子结果的容器
    List<List<Integer>> res = new LinkedList<>();
    public List<List<Integer>> permute(int[] nums) {
        //存放路径的容器
        LinkedList<Integer> track = new LinkedList<>();
        //用于记录元素使用情况的boolean数组
        //数组初始值全为false,意为“该元素尚未使用”
        boolean[] used = new boolean[nums.length];
        backtrack(nums,track,used);
        return res;
    }
    //backtrack函数参数选用:函数参数设置时只需要看看这个函数想达到目的
    //需要那些参数,然后把这些参数全丢尽括号中就好了
    void backtrack(int[] nums,LinkedList<Integer> track,
        boolean[] used){
        //终止条件:当子集收集满后放入最终解集中
        if(track.size() == nums.length){
            res.add(new LinkedList(track));
            return;
        }
        //遍历选择列表
        for(int i = 0;i < nums.length;i++){
            //如果这个元素已经使用过了,就跳过这个选择
            if(used[i]){
                continue;
            }
            //做选择
            track.add(nums[i]);
            //更新元素使用情况——“已使用”
            used[i] = true;
            //进入下一层决策
            backtrack(nums,track,used);
            //撤销选择
            track.removeLast();
            //更新元素使用情况——“未使用”
            used[i] = false;
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1396677.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【jQuery入门】基础使用-入口函数、顶级对象$

文章目录 前言一、基础使用1.1 jQuery的下载1.2 简单的使用 二、顶级对象$总结 前言 jQuery是一款广泛应用于前端开发的JavaScript库&#xff0c;它简化了许多常见任务的操作&#xff0c;使得代码编写更加便捷。本文将介绍jQuery的基础使用&#xff0c;包括入口函数和顶级对象…

IPFoxy运营干货|谷歌广告Google Ads建立广告需要注意什么?

编辑投放谷歌广告需要多少个步骤和什么准备工作&#xff0c;本文将来讲述&#xff0c;主要分5个内容&#xff1a;一、投放前竞对研究&#xff1b;二、投放前广告账户设置&#xff1b;三、建立广告系列&#xff1b;四、建立广告组&#xff1b;五、广告长期策略。接下来我们来开始…

防火墙技术

防火墙&#xff08;英语&#xff1a;Firewall&#xff09;技术是通过有机结合各类用于安全管理与筛选的软件和硬件设备&#xff0c;帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障&#xff0c;以保护用户资料与信息安全性的一种技术。 防火墙技术的功能主要在于及…

【安装VMware Tools】实现Vmware虚拟机和主机之间复制、粘贴内容、拖拽文件

https://www.bilibili.com/video/BV1rN411277B/?spm_id_from333.788.recommend_more_video.6&vd_sourcefb8dcae0aee3f1aab700c21099045395 https://blog.csdn.net/wxqian25/article/details/19406673 待解决方案&#xff1a; 重新下载ubuntu&#xff0c;然后按照 https://…

C#:接口中如何将某个值类型的字段传null?

在实际对接第三方接口时&#xff0c;偶尔会有一些字段在某些情况下是不需要传值的。那如何处理呢&#xff1f; 有两种方法&#xff1a; 1、将值类型改为可空类型&#xff1b; 2、定义基类&#xff0c;基类包含所有必须要传的字段&#xff0c;子类则加入偶尔需要传的字段。 下…

制造业企业数字化转型难点剖析及解决之法

导语 全球正在由工业经济向数字经济转型过渡&#xff0c;制造业正在且并将长期处于数字化转型发展阶段&#xff0c;并沿着数字化、网络化、智能化阶段不断跃升。但如何找准数字化转型的切入点&#xff0c;以低耗能、低成本、高效率的方式加快制造业转型升级的步伐&#xff0c;仍…

米粒图像预处理-图像背景均匀化

案例背景 食品检测在国家粮食安全中拥有举足轻重的地位。随着经济全球化程度的深入&#xff0c;中国巨大的市场消费力将吸引越来越多的国际米类品牌的进入&#xff0c;国内粮食市场的竞争将会日趋激烈&#xff0c;人们越来越注重粮食的安全和品质问题&#xff0c;粮食质量检测…

Sublime Text4 crack时替换的汇编指令

Sublime Text4 crack时替换的汇编指令 首先请支持正版&#xff0c;这里研究破解的步骤&#xff0c;仅做汇编代码学习。 破解步骤很简单&#xff1a; 打开二进制文件&#xff0c; 搜索 80 78 05 00 0F 94 C1&#xff0c; 替换为 C6 40 05 01 48 85 C9. (源: https://gist.git…

SQL Server中数据表的增删查改

文章目录 一、增二、查三、改四、删除 一、增 进行增删查改的前提需要在指定数据库中创建数据表&#xff0c;对这块不大理解的可以先看看前面几期文章&#xff1a; 创建数据库 创建数据表 use StudentManageDB go insert into Students (StudentName,Gender,Birthday,Age,Stu…

【图形学】直线光栅化算法(DDA算法,Bresenham算法和中点算法)

在数学上,直线就是由无穷多个点组成的, 在计算机屏幕显示的话, 需要做一些处理,对于光栅显示器&#xff0c;就是用有限多个点去逼近直线, 我们需要知道每一个像素点的坐标(都是整数) 数学上直线的方程如下 y k x b ykxb ykxb&#xff0c;给定直线的起点坐标 P 0 ( x 0 , y…

Docker部署的gitlab升级指南(15.11.X容器里升级PostgreSQL到13.8)

一、确定当前版本 #进入当前版本容器产看gitlab版本 docker exec -it gitlab cat /opt/gitlab/embedded/service/gitlab-rails/VERSION#显示版本如下 14.4.0二、备份数据&#xff0c;防止升级发生意外 #执行备份命令 docker exec -ti gitlab gitlab-rake gitlab:backup:creat…

MT6789(G99)性能参数/datasheet_MTK联发科4G处理器

联发科MT6789将4G智能手机带入下一代。基于高效率的台积电N6 (6nm级)芯片生产工艺&#xff0c;该芯片可全天候实现出色的游戏&#xff0c;加上大摄像头&#xff0c;快速显示&#xff0c;流畅的流媒体和可靠的全球连接。合作伙伴可以定制联发科Helio G99平台&#xff0c;以满足其…

Python高级编程之IO模型与协程

更多Python学习内容&#xff1a;ipengtao.com 在Python高级编程中&#xff0c;IO模型和协程是两个重要的概念&#xff0c;它们在处理输入输出以及异步编程方面发挥着关键作用。本文将介绍Python中的不同IO模型以及协程的概念、原理和用法&#xff0c;并提供丰富的示例代码来帮助…

go语言(七)----slice的声明方式

1、声明方式一 //声明一个slice1是一个切片&#xff0c;但是并没有给slice分配空间var slice1 []intslice1 make([]int,3)2、声明方式二 声明一个slice切片&#xff0c;同时给slice分配空间&#xff0c;3个空间&#xff0c;初始化值是0var slice1 []int make([]int,3)3、声…

ChatGPT 报错“Oops!We ran into an issue while signing you in…”如何解决?

ChatGPT报错&#xff1a;“Oops&#xff01;We ran into an issue while signing you in, please take abreak and try again soon.” 说明&#xff1a;哎呀&#xff01;我们在登录时遇到了一个问题&#xff0c;请稍作休息并尽快再试一次。 原因&#xff1a; 看到这个提示时&a…

杂记 | 在Linux上使用Docker-compose安装单机版Milvus向量数据库并配置访问控制和可视化面板(Attu)

文章目录 01 Milvus向量数据库简介02 安装前的准备03 安装3.1 创建milvus工作目录3.2 下载并编辑docker-compose.yml3.3 下载milvus.yml文件3.4 启动milvus 04 访问可视化面板并修改密码 01 Milvus向量数据库简介 Milvus是一款开源的向量数据库&#xff0c;它专为AI应用设计&a…

市场监管总局发布区块链和分布式记账技术6项标准,中创积极推动区块链产业发展!

近日&#xff0c;市场监管总局&#xff08;国家标准委&#xff09;批准发布一批重要国家标准&#xff0c;涉及生产生活、绿色可持续等多个领域&#xff0c;这些标准将在引领产业发展、促进绿色转型、助力对外贸易、推动城乡建设、提升生活品质等方面发挥重要作用。 其中一项标…

msvcr100.dll缺失的6种详细有效解决方法

msvcr100.dll究竟是什么文件&#xff1f;为什么会丢失&#xff1f;丢失后会对计算机产生什么影响&#xff1f;本文将详细介绍msvcr100.dll的定义、作用和影响&#xff0c;并给出6个解决msvcr100.dll丢失的方法。 一、msvcr100.dll是什么文件&#xff1f; msvcr100.dll是Micro…

跑通 yolov5-7.0 项目之训练自己的数据集

yolov5 一、yolov5 源码下载二、配置环境&#xff0c;跑通项目三、训练自己的数据集1、获取验证码数据2、标注图片&#xff0c;准备数据集3、开始训练自己的数据集1、train.py 训练数据集2、val.py 验证测试你的模型3、detect.py 正式用你的模型 四、遇到的报错、踩坑1、import…