力扣---全排列---回溯

思路:

递归做法,一般会有visit数组来判断第 i 位是否被考虑了。我们先考虑第0位,再考虑第1位,再考虑第2位...dfs函数中还是老套路,先判定特殊条件,再从当下的角度(决定第 j 位是哪个元素),依次遍历visit数组,依次将visit值为0的元素赋给第 j 位,并继续递归(记住要恢复现场)。

代码:

C++:

class Solution {
public:
    void dfs(vector<int>& visit,vector<vector<int>>& res,vector<int>& nums,vector<int>& path,int i,int len){
        if(i==len){
            res.push_back(path);
            return;
        }

        //考虑第i位
        for(int j=0;j<len;j++){
            if(visit[j]==0){
                visit[j]=1;
                path.push_back(nums[j]);
                dfs(visit,res,nums,path,i+1,len);
                visit[j]=0;
                path.pop_back();
            }
        }

    }

    vector<vector<int>> permute(vector<int>& nums) {
        vector<vector<int>> res;
        int len=nums.size();
        vector<int> visit(len,0);
        vector<int> path;
        dfs(visit,res,nums,path,0,len);
        return res;
    }
};

Python:

class Solution:
    def permute(self, nums: List[int]) -> List[List[int]]:
        def dfs(visit:List[int],res:List[List[int]],num:List[int],path:List[int],i:int,len_:int):
            if i==len_:
                res.append(path.copy())
                return 
            for j in range(len_):
                if visit[j]==0:
                    visit[j]=1
                    path.append(nums[j])
                    dfs(visit,res,nums,path,i+1,len_)
                    visit[j]=0
                    path.pop()
        res=[]
        len_=len(nums)
        visit=[0]*len_
        path=[]
        dfs(visit,res,nums,path,0,len_)
        return res

注意这句话:

res.append(path.copy()),将 path:List[int] 加入到 res:List[List[int]] 类型中时,记得先将path copy一下,再进行append操作

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker 应用部署

MySQL部署 需求 在 Docker 容器中部署 MySQL &#xff0c;并通过外部 mysql 客户端操作 MySQL Server 。 步骤 1. 搜索mysql镜像 docker search mysql 2. 拉取mysql镜像 docker pull mysql:5.6 3. 创建容器&#xff0c;设置端口映射、目录映射 事先在/root目录下创建m…

VScode手动安装vsix格式插件,提示安装插件与code版本不兼容问题

问题描述: vscode手动按装插件提示"插件不兼容code版本 原因方案:修改安装包内的package.json文件中的版本号与vscode版本号对应即可 解决步骤 以(adpyke.codesnap-1.3.4.vsix)安装包为例 手动安装vscode弹出 无法安装扩展“adpyke.codesnap-1.3.4”&#xff0c;它与 …

每周一算法:迭代加深A*

题目链接 AcWing 180. 排书 题目描述 给定 n n n 本书&#xff0c;编号为 1 ∼ n 1\sim n 1∼n。 在初始状态下&#xff0c;书是任意排列的。 在每一次操作中&#xff0c;可以抽取其中连续的一段&#xff0c;再把这段插入到其他某个位置。 我们的目标状态是把书按照 1 ∼…

提高企业员工生产力的办法

在现代商业环境中&#xff0c;提高企业员工生产力是企业持续发展的关键因素之一。员工生产力的提升不仅有助于企业提高运营效率&#xff0c;还能增强企业的市场竞争力。那么&#xff0c;如何有效地提高企业员工生产力呢&#xff1f;本文将就此问题进行探讨。 一、引入先进技术软…

[ C++ ] STL---stack与queue

目录 stack简介 stack的常用接口 queue简介 queue的常用接口 stack的模拟实现 queue的模拟实现 stack简介 1. stack是具有后进先出操作的一种容器适配器&#xff0c;其只能从容器的一端进行元素的插入与删除操作&#xff1b; 2. stack是作为容器适配器被实现的&#xff0…

jmeter接口自动化测试框架

接口测试可以分为两部分&#xff1a; 一是线上接口&#xff08;生产环境&#xff09;自动化测试&#xff0c;需要自动定时执行&#xff0c;每5分钟自动执行一次&#xff0c;相当于每5分钟就检查一遍线上的接口是否正常&#xff0c;有异常能够及时发现&#xff0c;不至于影响用…

基于preCICE的Fluent适配器开发分享

1 开发目的 后向台阶流是流动分离现象的经典代表&#xff0c;为了更有效地控制后向台阶流中的重要特征参数&#xff0c;如背部分离压强和湍流强度&#xff0c;进行了耦合分析。通过该耦合分析&#xff0c;能够深入研究后向台阶流的特性&#xff0c;并探索如何控制这些参数对流…

RK3568 安装Miniconda3

下载链接:https://download.csdn.net/download/smile_5me/89012477?spm=1001.2014.3001.5503 需要RK3568运行Ubuntu,之前的文章有关于如何安装Ubuntu以及遇到的问题 1、 拷贝 Miniconda3-latest-Linux-aarch64.sh 到开发板 2、运行安装 Miniconda3-latest-Linux-aarch64.…

央视6周年巨献《中国神话》AI微短剧首发,人工智能频道震撼上线

在庆祝成立六周年之际&#xff0c;中央广播电视总台&#xff08;简称央视&#xff09;为观众带来了一场科技与文化的交融盛宴。近日&#xff0c;央视隆重发布了我国首部AI全流程微短剧《中国神话》&#xff0c;并正式上线了人工智能专业频道。这一系列举措彰显了央视在人工智能…

网络: 应用层

网络资源 uri(uniform resource identifier) 统一资源标识符。url(uniform resource location) 统一资源定位符&#xff0c;统指绝对路径。urn(uniform resource name) 统一资源名。 http 报文结构 第一部分简略信息&#xff0c;包含请求方法、url 和协议版本&#xff1b;或…

【c++】string类---标准库(STL)中的string类

主页&#xff1a;醋溜马桶圈-CSDN博客 专栏&#xff1a;c_醋溜马桶圈的博客-CSDN博客 gitee&#xff1a;mnxcc (mnxcc) - Gitee.com 目录 1.STL(标准库) 1.1 什么是STL 1.2 STL的版本 1.3 STL的六大组件 1.4 STL的重要性 1.5 如何学习STL 6.STL的缺陷 2. 为什么要学习st…

STM32定时器详解(1)

文章目录 前言一、STM32中定时器的分类二、基础定时器2.1基础定时器框图讲解2.2基础定时器计数功能讲解 三、通用定时器3.1通用定时器基本描述3.2通用定时器硬件框图 四、高级定时器4.1高级定时器基本描述4.2高级定时器硬件框图 总结 前言 本篇文章将带大家来学习STM32中的定时…

SunFMEA冠翔(台山)工业FMEA培训会圆满结束

近日&#xff0c;SunFMEA软件成功在冠翔&#xff08;台山&#xff09;工业有限公司举办了为期三天的FMEA软件系统培训&#xff0c;通过重要知识讲解、现场答疑、演练互动、软件实操等环节&#xff0c;把培训氛围推向高潮。 ​ 此次培训分为DFMEA与PFMEA两部分&#xff0c;按照七…

浏览器工作原理与实践--TCP协议:如何保证页面文件能被完整送达浏览器

在衡量Web页面性能的时候有一个重要的指标叫“FP&#xff08;First Paint&#xff09;”&#xff0c;是指从页面加载到首次开始绘制的时长。这个指标直接影响了用户的跳出率&#xff0c;更快的页面响应意味着更多的PV、更高的参与度&#xff0c;以及更高的转化率。那什么影响FP…

不定方程求解【详解+代码】

不定方程求解 文章目录 不定方程求解题目描述 分析题目简单穷举法思路1&#xff1a;Java代码C代码 思路2Java代码C代码 测试结果 题目描述 给定正整数a&#xff0c;b&#xff0c;c。求不定方程 axbyc 关于未知数x和y的所有非负整数解组数。 Input 一行&#xff0c;包含三个正…

Linux离线部署gitLab及使用教程

一、下载gitLab的linux系统rpm包 地址&#xff1a;Index of /gitlab-ce/yum/el7/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 找到这个最新版 点击下载 二、上传到linux系统 笔者是在windows系统下的vmware虚拟机中部署安装的&#xff0c;虚拟机中安装了cent…

c/c++整数和浮点数在内存中存储

了解变量的储存原理是我们灵活运用和防止数据截断改变带来的危害的有效途径。 那么我们从int char和float double两类来阐述内存的储存。 首先我们讲内存单位&#xff1a; 内存单位从小到大分别是bit byte KB MB GB TB PB。 bit是最小的内存单位&#xff0c;它可以存储一…

docker容器下部署hbase并在springboot中通过jdbc连接

我在windows的docker中部署了一个hbase服务&#xff0c;然后用springboot连接到此服务并访问数据。 详情可参考项目中的README.md。项目中提供了用于构建镜像的dockerfile&#xff0c;以及测试代码。 项目连接&#xff1a;https://gitee.com/forgot940629/hbase_phoenix_spring…

Java学习路线大纲

一、学习路线 二、学习大纲 0. 地基部分 数据结构&#xff1a;线性表、队列、栈、树、图、哈希等等常见算法&#xff1a;10大排序、字符串匹配、二分法、双指针等等操作系统&#xff1a;进行线程管理、内存管理、I/O等等计算机网络&#xff1a;四层协议、TCP/UDP、HTTP/HTTPS等…

安装elasticsearch和kibana

1.部署单点es 1.1.创建网络 因为我们还需要部署kibana容器&#xff0c;因此需要让es和kibana容器互联。这里先创建一个网络&#xff1a; docker network create es-net 1.2.加载镜像 这里我们采用elasticsearch的7.12.1版本的镜像&#xff0c;这个镜像体积非常大&#xff0…