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

每日刷题|回溯法解决全排列问题

                                        食用指南:本文为作者刷题中认为有必要记录的题目

                                        前置知识回溯法经典问题之组合

                                       ♈️今日夜电波:爱人错过—告五人

                                                                1:11 ━━━━━━️💟──────── 4:52
                                                                    🔄   ◀️   ⏸   ▶️    ☰ 

                                      💗关注👍点赞🙌收藏您的每一次鼓励都是对我莫大的支持😍 


目录

回溯法的理解

💮 一、全排列

🌺二、全排列II


回溯法的理解

 本文参考了一位大佬的题解,详细的介绍了回溯法:链接

上一篇刷题文: 回溯法经典问题之子集

        记住一句话:for循环横向遍历,递归纵向遍历,回溯不断调整结果集。 这句话将从始至终贯穿我们对于以上问题的回溯解决办法。 


💮 一、全排列

题目链接:46. 全排列

题目描述:

       给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。

示例 1:

输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

示例 2:

输入:nums = [0,1]
输出:[[0,1],[1,0]]

示例 3:

输入:nums = [1]
输出:[[1]]

提示:

  • 1 <= nums.length <= 6
  • -10 <= nums[i] <= 10
  • nums 中的所有整数 互不相同

本题思路:

        首先:采用经典的“回溯三部曲”:

        1、定义两个全局变量,一个用来存放符合条件单一结果(path),一个用来存放符合条件结果的集合(result)。

        2、回溯的主体,回溯终止条件。path保存一组数据,每次遍历到叶子节点,再插入到result中,并且回溯到上一个节点。

        3、单层搜索的过程。for循环用来横向遍历,递归的过程是纵向遍历。

       根据题意我们做出一定的改动:

        我们额外定义一个bool类型的used用于确定每一个节点是否使用过,以此来解决重复插入的问题,并且也可以通过used对应的位置是否为false来确定是否进行后续操作。一句话概括就是:只有当used[i]==0时才去进行后续操作。

        一图让你了解~以{1,2,3}为例

class Solution {
private:
vector<int> path;
vector<vector<int>> result;void trackback(vector<int>& nums,vector<bool>& used)
{if(path.size()==nums.size()){result.push_back(path);}for(int i=0;i<nums.size();i++){if(used[i]!=1){path.push_back(nums[i]);used[i]=1;trackback(nums,used);used[i]=0;path.pop_back();}}
}
public:vector<vector<int>> permute(vector<int>& nums) {path.clear();result.clear();vector<bool> used;used.resize(nums.size());sort(nums.begin(),nums.end());trackback(nums,used);return result;}
};


🌺二、全排列II

题目链接: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]]

提示:

  • 1 <= nums.length <= 8
  • -10 <= nums[i] <= 10

本题思路:

        本题实际上为上一题的拓展题目,基本上的思路跟上一题是的没什么区别的,但是由于此题中的元素是可以重复的,那我们就不能按照上一题只需要全部遍历一遍节点即可,在这里,我们需要加入剪枝操作,以此来解决重复选取问题。一句话概括就是:同一树枝上可以选取,但是同一树层上不可以选取!

        即:添加这段判断语句{i>0&&nums[i-1]==nums[i]&&used[i-1]==0}来筛选重复的元素!

        一图让你了解~以{1,1,2}为例

class Solution {
private:
vector<int> path;
vector<vector<int>> result;void trackback(vector<int>& nums,vector<bool>& used)
{if(path.size()==nums.size()){result.push_back(path);return;}for(int i=0;i<nums.size();i++){if(i>0&&nums[i-1]==nums[i]&&used[i-1]==0)continue;if (used[i] != 1){path.push_back(nums[i]);used[i] = 1;trackback(nums, used);used[i] = 0;path.pop_back();}}
}
public:vector<vector<int>> permuteUnique(vector<int>& nums) {path.clear();result.clear();vector<bool> used;used.resize(nums.size());sort(nums.begin(),nums.end());trackback(nums,used);return result;}
};


                感谢你耐心的看到这里ღ( ´・ᴗ・` )比心,如有哪里有错误请踢一脚作者o(╥﹏╥)o!  

                                 

                                                                 给个三连再走嘛~      

相关文章:

每日刷题|回溯法解决全排列问题

​ 食用指南&#xff1a;本文为作者刷题中认为有必要记录的题目 前置知识&#xff1a;回溯法经典问题之组合 ♈️今日夜电波&#xff1a;爱人错过—告五人 1:11 ━━━━━━️&#x1f49f;──────── 4:52 …...

10-JVM调优工具详解

上一篇&#xff1a;09-JVM垃圾收集底层算法实现 前置启动程序 事先启动一个web应用程序&#xff0c;用jps查看其进程id&#xff0c;接着用各种jdk自带命令优化应用 1.Jmap 此命令可以用来查看内存信息&#xff0c;实例个数以及占用内存大小 jmap -histo 14660 #查看历史…...

东方博易oj——3119 - 约瑟夫问题2(链表)

文章目录 题目题目描述输入输出样例输入 输出标签 AC代码 题目 题目描述 约瑟夫问题&#xff1a;有 &#xff4e; &#xff4e; &#xff4e;只猴子&#xff0c;按顺时针方向围成一圈选大王&#xff08;编号从 &#xff11; &#xff11; &#xff11;到 &#xff4e; &#…...

C++,day0907

#include <iostream>using namespace std; struct stu { private:int num; private:double score[32];public:void setNum(){cout <<"请输入学生人数:";cin >>num;}void input(){cout<<"请输入学生的成绩:"<<endl;for(int i…...

孤儿僵尸守护进程的简单理解

孤儿进程&#xff1a; 一个父进程退出&#xff0c;而它的一个或多个子进程还在运行&#xff0c;那么那些子进程将成为孤儿进程。孤儿进程将被init进程所收养&#xff0c;并由init进程对它们完成状态收集工作。 如何模仿一个孤儿进程&#xff1a; 答案是&#xff1a; kill 父…...

学习笔记——Java入门第一季

1.1 Java的介绍与前景 Java语言最早期的制作者&#xff1a;James Gosling&#xff08;詹姆斯高斯林&#xff09; 1995年5月23日&#xff0c;Sun Microsystems公司宣布Java语言诞生。 1.2 Java的特性与版本 跨平台 开源&#xff08;开放源代码&#xff09; Java代码&#xff…...

更改注册表exe值后的惨痛经历

装软件时由于执行性文件打不开&#xff0c;搜索教程更改了exefile的值&#xff0c;最后整个电脑崩了&#xff0c;所有EXE都打不开&#xff0c;折腾了5个小时&#xff0c;什么办法都试了&#xff0c;甚至重置电脑都不让&#xff0c;打算拿电脑城修电脑了&#xff0c;突然搜到了一…...

stable diffusion实践操作-LyCORIS

系列文章目录 stable diffusion实践操作 文章目录 系列文章目录前言一、LyCORIS是什么&#xff1f;二、使用步骤1.下载2.安装3 使用 二、整理模型1.LoHa-v1.0-pynoise 总结 前言 LyCORIS&#xff0c;可以理解为lora的加强版本。 LyCORIS - Lora beYond Conventional methods,…...

无需公网IP教你如何外网远程访问管家婆ERP进销存

文章目录 前言 1.管家婆服务2. 内网穿透2.1 安装cpolar内网穿透2.2 设置远程访问 3. 固定访问地址4. 配置固定公网访问地址 前言 管家婆辉煌系列产品是中小企业进销存、财务管理一体化的典范软件&#xff0c;历经十余年市场的洗礼&#xff0c;深受广大中小企业的欢迎&#xff…...

Swift使用编解码库Codable

Codable 是 Swift 引入的全新的编解码库&#xff0c;使开发者更方便的解析JSON 或 plist 文件。支持枚举、结构体和类。 Codable协议定义 Codable代表一个同时符合 Decodable 和 Encodable 协议的类型&#xff0c;即可解码且可编码的类型。 typealias Codable Decodable &a…...

Vue + Element UI 前端篇(三):工具模块封装

Vue Element UI 实现权限管理系统 前端篇&#xff08;三&#xff09;&#xff1a;工具模块封装 封装 axios 模块 封装背景 使用axios发起一个请求是比较简单的事情&#xff0c;但是axios没有进行封装复用&#xff0c;项目越来越大&#xff0c;会引起越来越多的代码冗余&am…...

【pytorch】数据加载dataset和dataloader的使用

1、dataset加载数据集 dataset_tranform torchvision.transforms.Compose([torchvision.transforms.ToTensor(),])train_set torchvision.datasets.CIFAR10(root"./train_dataset",trainTrue,transformdataset_tranform,downloadTrue) test_set torchvision.data…...

搭建单机版FastDFS分布式文件存储系统

一、准备工作 1、下载FastDFS安装包和依赖包 https://codeload.github.com/happyfish100/libfastcommon/tar.gz/V1.0.43 https://codeload.github.com/happyfish100/fastdfs/tar.gz/V6.06 https://codeload.github.com/happyfish100/fastdfs-nginx-module/tar.gz/V1.22 注&…...

【验证码逆向专栏】房某下登录滑块逆向分析

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;不提供完整代码&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 本文章未…...

Python 3.11 版本是对线程安全做了什么更改吗

问题&#xff1a;这份代码在 3.11.3 中它居然输出 0 &#xff0c;一度以为自己写错了&#xff0c;抱着不信邪的态度&#xff0c;又搞了个 Python 3.9.7 的环境试了下&#xff0c;果然还是符合自己预期&#xff0c;输出不为 0&#xff0c;想问下 3.11 版本中是做了什么修改吗&am…...

【Docker】镜像的创建、管理与发布

镜像的获取 镜像可以从以下方式获得&#xff1a; 从远程镜像仓库拉取&#xff0c;可以是公有仓库&#xff0c;也可以是私有仓库从Dockerfile构建从文件导入&#xff08;离线&#xff09;从容器提交 镜像的基本操作 跟镜像相关的命令如下&#xff1a; $ docker image --help…...

移动硬盘或U盘无法弹出的解决方法

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 最近在红米本win11中总遇到“该设备正在使用中”而无法弹出硬盘的问题。 解法该问题的思路&#xff1a;先定位占用该设备的进程&#xff0c;然后结束该进程。 定位进程 既然设备被占用&#xff0c;那肯定…...

(leetcode1761一个图中连通三元组的最小度数,暴力+剪枝)-------------------Java实现

&#xff08;leetcode1761一个图中连通三元组的最小度数&#xff0c;暴力剪枝&#xff09;-------------------Java实现 题目表述 给你一个无向图&#xff0c;整数 n 表示图中节点的数目&#xff0c;edges 数组表示图中的边&#xff0c;其中 edges[i] [ui, vi] &#xff0c;…...

【漏洞复现】金和OA C6任意文件读取漏洞

漏洞描述 金和OA协同办公管理系统C6软件共有20多个应用模块&#xff0c;160多个应用子模块&#xff0c;涉及的企业管理业务包括协同办公管理、人力资源管理、项目管理、客户关系管理、企业目标管理、费用管理等多个业务范围&#xff0c;从功能型的协同办公平台上升到管理型协同…...

2023年全国大学生数学建模B题

多波束测线问题 1.问题提出 单波束测深是利用声波在水中的传播特性来测量水体深度的技术。声波在均匀介质中作匀 速直线传播&#xff0c;在不同界面上产生反射&#xff0c;利用这一原理&#xff0c;从测量船换能器垂直向海底发射声波信号&#xff0c;并记录从声波发射到信号接…...

知识图谱与推荐系统实战

一、传统推荐系统的“天花板”协同过滤的困境你刷电商、看视频时&#xff0c;推荐系统总在猜你喜欢什么。最经典的协同过滤思路是“物以类聚、人以群分”&#xff1a;你买过A&#xff0c;那么买过A的人也常买B&#xff0c;于是把B推给你。这套方法简单有效&#xff0c;但也有硬…...

企业网盘怎么选?从同步效率、权限、安全合规到协作:2025横评清单

随着企业数字化办公深化&#xff0c;企业网盘承载的内容从项目文件扩展到合同、投研材料、设计源文件、制度文档与交付归档。选型时如果只看容量和下载速度&#xff0c;往往会忽略更关键的管理问题&#xff1a;越权共享如何追责、误删误改如何恢复、离职交接如何确保资料不丢、…...

AI专著生成神器来袭!用AI写专著,20万字专著轻松到手!

创新是学术专著的核心&#xff0c;也是写作中最具挑战性的部分。一部合格的专著不能仅仅是已有成果的简单堆叠&#xff0c;而是需要展现贯穿整本书的独到见解、理论框架或者研究方法。面对浩如烟海的学术文献&#xff0c;寻找那些尚未被挖掘的研究空白实属不易——有时选题已经…...

突发环境事件怎么模拟?用Python+GIS实现高斯烟团模型(附完整代码)

突发污染事件动态模拟&#xff1a;Python与GIS融合的高斯烟团建模实战 化工泄漏、危险品运输事故等突发环境事件往往需要快速响应与精准评估。传统烟羽模型在瞬态污染场景中存在局限性&#xff0c;而高斯烟团模型凭借其动态扩散模拟能力成为应急决策的利器。本文将手把手带您实…...

G3000,MG3660,MG3640S,TS3380,G3800,TS3480,TS3680,TS3460,TS3350,MG6380报错5B00,P07,E08,1700,5b04废墨垫清零,好用

下载&#xff1a;点这里下载 备用下载&#xff1a;https://pan.baidu.com/s/1WrPFvdV8sq-qI3_NgO2EvA?pwd0000 常见型号如下&#xff1a; G系列 G1000、G1100、G1200、G1400、G1500、G1800、G1900、G1010、G1110、G1120、G1410、G1420、G1411、G1510、G1520、G1810、G1820、…...

终极指南:如何在OBS Studio中免费使用VST插件实现专业级音频处理

终极指南&#xff1a;如何在OBS Studio中免费使用VST插件实现专业级音频处理 【免费下载链接】obs-vst Use VST plugins in OBS 项目地址: https://gitcode.com/gh_mirrors/ob/obs-vst 想要让直播声音瞬间达到专业水准&#xff1f;OBS-VST插件就是你的答案&#xff01;这…...

破解Windows安装程序本地化难题:Inno Setup简体中文翻译的技术实现与架构设计

破解Windows安装程序本地化难题&#xff1a;Inno Setup简体中文翻译的技术实现与架构设计 【免费下载链接】Inno-Setup-Chinese-Simplified-Translation :earth_asia: Inno Setup Chinese Simplified Translation 项目地址: https://gitcode.com/gh_mirrors/in/Inno-Setup-Ch…...

Preboot 网格系统完全教程:如何构建响应式布局而不依赖框架

Preboot 网格系统完全教程&#xff1a;如何构建响应式布局而不依赖框架 【免费下载链接】preboot A collection of LESS mixins and variables for writing better CSS. 项目地址: https://gitcode.com/gh_mirrors/pr/preboot 想要构建响应式网站布局但不想依赖笨重的CS…...

Spring Boot Actuator生产级监控与管理工具包

Spring Boot Actuator 是 Spring Boot 提供的生产级监控与管理工具包&#xff0c;帮你把应用“可观测化”。它提供了一系列内置的端点&#xff08;Endpoint&#xff09;&#xff0c;用来查看应用的内部状态&#xff0c;比如健康情况、配置信息、内存指标等。你可以把它理解成为…...

129、运动控制中的软件架构:分层设计

运动控制中的软件架构:分层设计 从一次半夜的电机啸叫说起 凌晨两点,车间里只剩示波器的荧光。我盯着那根诡异的电流波形——电机在低速运行时发出刺耳的啸叫,像指甲划过黑板。PID参数调了无数遍,滤波器换了好几种,问题依旧。直到我打开同事留下的代码,发现他把电流环、…...