【CT】LeetCode手撕—46. 全排列

目录

  • 题目
  • 1- 思路
  • 2- 实现
    • ⭐46. 全排列——题解思路
  • 3- ACM实现


题目

  • 原题连接:46. 全排列

1- 思路

模式识别

  • 模式1不含重复数字的数组 nums ——> 任意顺序 可能的全排列 ——> 回溯
  • 模式2全排列 ——> 排列问题,不同于组合问题 ——>
  • 回溯每次相当于枚举一个结果集,当当层结果集的长度为 nums.length 时候收集结果

为什么排列问题需要用 used 数组?

  • 排列问题关注元素的顺序,即[1, 2]和[2, 1]被视为两个不同的排列。为了生成所有可能的排列,每个元素在每个特定的排列中只能出现一次,但可以在不同的排列中重复出现。
  • used数组的作用: 在排列问题中,used数组用来跟踪每个元素是否已经被当前排列使用。这是因为每个元素在生成单个排列时只能使用一次,但在生成不同的排列时可以重新使用。used数组确保在构建每个排列时,每个元素只被选择一次。

组合问题中

  • 组合问题不关注元素的顺序,即[1, 2]和[2, 1]被视为相同的组合。组合问题通常要求选择一个子集,不考虑元素的排列顺序。
  • 组合问题中的递归调用: 在组合问题中,通常不需要used数组,因为一旦选择了一个元素,就不需要再次选择它。递归调用时,通常将下一个元素的索引传递给递归函数,这样就自然地避免了重复使用同一个元素。
  • 组合问题通过传递 startIndex 来避免递归过程中重复取元素的问题。

回溯三部曲

  • 1.回溯参数返回值
    • 参数为:参数 nums
    • 返回值为 void,通过定义 List<List<Integer>> res 收集结果
  • 2.终止条件 && 结果收集
    • 当 当前 iterm.size() == nums.length 收集结果并 return;
  • 3.回溯搜索的遍历过程
    • for(int i = 0; i<nums.length;i++)

2- 实现

⭐46. 全排列——题解思路

在这里插入图片描述

class Solution {List<List<Integer>> res = new ArrayList<>();List<Integer> path = new ArrayList<>();boolean[] used;public List<List<Integer>> permute(int[] nums) {used = new boolean[nums.length];Arrays.fill(used,false);backTracing(nums);return res;}public void backTracing(int[] nums){// 1.终止条件if(path.size() == nums.length){res.add(new ArrayList(path));return ;}// 2. 回溯for(int i = 0 ; i < nums.length ;i++){if(used[i]){continue;}used[i] = true;path.add(nums[i]);backTracing(nums);used[i] = false;path.removeLast();}}
}

3- ACM实现

public class permute {static List<List<Integer>> res = new ArrayList<>();static List<Integer> path = new ArrayList<>();static boolean[] used;public static List<List<Integer>> permuteFunction(int[] nums){used = new boolean[nums.length];Arrays.fill(used,false);backTracing(nums);return res;}public static void backTracing(int[] nums){// 2.终止条件if(nums.length==path.size()){res.add(new ArrayList<>(path));}// 3.回溯遍历搜索过程for(int i = 0; i < nums.length;i++){if(used[i]){continue;}used[i] = true;path.add(nums[i]);backTracing(nums);used[i] = false;path.remove(path.size()-1);}}public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("输入全排列数组长度");int n = sc.nextInt();System.out.println("输入数组值");int[] nums = new int[n];for(int i = 0 ; i < n;i++){nums[i] = sc.nextInt();}System.out.println("全排列的结果是");List<List<Integer>> forRes = permuteFunction(nums);System.out.println(forRes.toString());}
}

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

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

相关文章

磁力搜索引擎目前有那些,推荐50个以及简单介绍

在互联网上&#xff0c;有许多磁力搜索引擎可以帮助用户快速找到所需的资源。 以下是一些受欢迎的磁力搜索引擎及其简单介绍&#xff1a; Torrentz2&#xff1a;www.xsmxdy.com 一个全球性的BT种子搜索网站&#xff0c;提供大量的资源链接。 RARBG&#xff1a;yinghuacili.c…

用VPS部署聊天机器人有哪些优势?

VPS足以帮助您将人工智能 (AI) 的功能无缝融入聊天机器人并增强客户支持。聊天机器人已迅速成为改善用户体验的首选解决方案&#xff0c;因为它们全天候在线且可编程回答各种问题。 聊天机器人在客户支持方面的作用不容置疑。但所有出色的解决方案都需要出色的网络托管。 VPS…

高性能并行计算华为云实验二:WordCount算法实验

目录 一、实验目的 二、实验说明 三、实验过程 3.1 创建wordcount源码 3.1.1 实验说明 3.1.2 文件创建 3.2 Makefile文件创建与编译 3.3 主机配置文件建立与运行监测 3.3.1 主机配置文件建立 3.3.2 运行监测 三、实验结果与分析 4.1 实验结果 4.2 结果分析 4.2.1 …

Nature | 解锁大脑运动控制机理!哈佛大学与DeepMind实现「AI大脑」控制虚拟老鼠

近日&#xff0c;哈佛大学的研究人员与谷歌DeepMind AI 实验室合作&#xff0c;开发出了一种虚拟大鼠模型&#xff0c;以研究大脑如何控制真实老鼠的运动。这个创新的模型准确地模拟了在真实大鼠身上观察到的神经活动&#xff0c;可以用于探讨大脑是如何控制动物的运动行为。 …

c++重载输出流(<<)和输入流(>>)

一.重载输出流 在C中&#xff0c;可以重载输出流运算符&#xff08;<<&#xff09;来自定义对象的输出方式。重载输出流运算符允许我们以自定义的方式将对象输出到标准输出流或其他输出流中。 以下是关于重载输出流运算符&#xff08;<<&#xff09;的几个知识点…

RNN/LSTM/GRU/TRANFORMER/编码器解码器理解

编码器和解码器是一种框架,lstm和gru都是这个框架中对这一框架的不同实现 编码器与解码器是一种架构,一种思想,注意力也是一种思想,相互独立,只是二者可以结合以用来训练模型可以提升模型能力 rnn gru lstm是三种不同的模型 里面并没有注意力机制这回事 RNN中有编码器和解码器实…

时间安排 |规划

计算机网络&#xff08;记得完成作业本上的习题&#xff09; 先看王道知识点讲解 然后不懂得看 计算机网络微课堂&#xff08;有字幕无背景音乐版&#xff09;_哔哩哔哩_bilibili 最后做本章习题 【乱讲的】《计算机网络》&#xff08;第8版&#xff09;课后习题讲解_哔哩…

杀疯了!PerfXCloud-AI大模型夏日狂欢来袭,向基石用户赠送 ∞ 亿Token!

【澎峰科技重磅消息】 在全球范围内大模型正逐渐成为强大的创新驱动力。在这个充满激情的夏日&#xff0c;PerfXCloud为开发者和企业带来了前所未有的福利&#xff1a; 1. 零成本亲密、深度体验大模型&#xff0c;提供大量示范案例。 2. 向基石用户赠送∞亿Token的激励计划。…

预期和视角之外是什么?

记得“大时代”里讲过这么一句话,你要在你的世界里打败敌人。这句话,证明了人是活在心境里,小时候看到的葫芦娃也是这个道理,你去找蛇精去人家地盘上,容易中计,葫芦娃救爷爷一个个送,你要不中计就要逃出她的心境。在股票市场,养家心法是什么?它是心境,92科比说过要么…

HTML静态网页成品作业(HTML+CSS+JS)——家乡莆田介绍网页(5个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;使用Javacsript代码实现图片轮播&#xff0c;共有5个页面。 二、作品…

qt 简单实验 json格式的文件写入配置文件

1.概要 2.代码 //#include "mainwindow.h"#include <QApplication> #include <QFile> #include <QJsonDocument> #include <QJsonObject> //读取json数据的配置文件int main(int argc, char *argv[]) {QApplication a(argc, argv);QString…

学懂C#编程:常用高级技术——委托(Delegate)应用场景——委托与Lambda表达式的结合使用详解

在C#中&#xff0c;委托与Lambda表达式的结合使用是现代编程实践中的一个重要且强大的特性&#xff0c;它极大地提高了代码的简洁性和可读性。下面将详细讲解这两个概念如何协同工作&#xff0c;以及如何在实际编程中有效利用它们。 委托基础 委托是C#中的一种引用类型&#x…

基于SpringBoot+协同过滤算法的家政服务平台设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;…

问题解答:如何每隔2分钟弹出一次弹出框

事情是这样的&#xff0c;昨天有个粉丝问我&#xff1a;如何每隔2分钟弹出一次弹出框。 我说 那不就是setInterval嘛&#xff0c;然后设定2分钟执行一次。 他说 不是的&#xff0c;这个2分钟只是我说的一个时间&#xff0c;不是常量&#xff0c;是服务端下发的。 我说 那就获取…

matlab入门基础笔记

1、绘制简单三角函数&#xff1a; 绘制正弦曲线和余弦曲线。x[0:0.5:360]*pi/180; plot(x,sin(x),x,cos(x)); &#xff08;1&#xff09;明确x轴与y轴变量&#xff1a; 要求为绘制三角函数&#xff1a; X轴&#xff1a;角度对应的弧度数组 Y轴&#xff1a;对应sin(x)的值 求…

电商平台生活用品销售数据分析与应用

摘 要 在当前互联网飞速发展的时代&#xff0c;计算机应用给我们的工作生活带来了极大的便利。如今我们的生活离不开电商平台&#xff0c;其随之而来的是各种各样的销售数据与消费者信息&#xff0c;这些数据和信息的分析应用成为了当前互联网领域研究的重要部分。 本论文以基…

python自动化办公工具:自动批量生成奖状的工具(可视化)

&#x1f446;点击关注 获取更多编程干货&#x1f446; 不知道大家有没有注意到一种趋势&#xff0c;现在即便是那些非程序员&#xff0c;甚至对计算机一窍不通的人&#xff0c;也开始学习Python了&#xff0c;其“普及程度”实在让人感到有些惊讶。 那么&#xff0c;对于那些…

如何通过防泄密U盘,实现数据传输的安全性及可控性?

随着信息技术的发展&#xff0c;U盘作为重要的数据存储和传输工具&#xff0c;其安全性越来越受到关注。在日常办公中&#xff0c;经常会遇到这类情况&#xff1a;员工为了方便&#xff0c;随意使用U盘拷贝公司的机密资料。一旦U盘丢失或者被窃取&#xff0c;公司的机密资料就有…

警惕!最新17本期刊(含2本Top)被“镇压”,无影响因子无分区,这是被踢了吗?

本周投稿推荐 SSCI • 中科院2区&#xff0c;6.0-7.0&#xff08;录用友好&#xff09; EI • 各领域沾边均可&#xff08;2天录用&#xff09; CNKI • 7天录用-检索&#xff08;急录友好&#xff09; SCI&EI • 4区生物医学类&#xff0c;0.5-1.0&#xff08;录用…

【金】02Y90-60 大数据-HivetoMysQL

1、安装 Java 程序&#xff08;jdk&#xff09; 2、添加以下JAR包 3、确认配置成自己的数据库 ....