46. 全排列

news2024/9/22 23:33:10

一次一粒沙,一次一件事。 ——《人性的优点》

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 中的所有整数 互不相同

思路:(回溯:暴力遍历)

回溯万能模板:

void backtracking(/* 所需参数(访问标记, 中间存储, 最终存储, 原始数据)*/) {
		// TODO 自动生成的方法存根
		if(/*终止条件*/) {
			//一种情况,加入最终存储
			return; //返回
		}
		for(/*对现有条件进行罗列*/) {
			if(/*判断是否合理,或者是否已访问*/) {
				continue;//跳过
			}
			//将该元素加入中间存储(修改条件)
			//标位已访问
			backtracking(/*参数*/); //递归调用自身
			//将该元素从中间存储删除(条件复位,即 :回溯)
			//标记为未访问
		}
	}

本题注意点:ArrayList是一个引用类型,因此每次都要new一个再加入到list中

代码: (Java)

import java.util.ArrayList;
import java.util.List;

public class arrangement {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		int [] nums = {1, 2, 3};
		System.out.println(permute(nums));
	}
	public static List<List<Integer>> permute(int[] nums) {
		List<List<Integer>> alarr = new ArrayList<>();
		List<Integer> midarr = new ArrayList<>();
		boolean [] hasVisited = new boolean [nums.length];
		if(nums == null || nums.length == 0) {
			return alarr;
		}
		backtracking(hasVisited, midarr, alarr, nums);
		return alarr;
	}
	private static void backtracking(boolean[] hasVisited, List<Integer> midarr, List<List<Integer>> alarr, int[] nums) {
		// TODO 自动生成的方法存根
		if(midarr.size() == hasVisited.length) {
			alarr.add(new ArrayList<>(midarr));//重新构造一个 List
			return;
		}
		int n = hasVisited.length;
		for(int i = 0; i < n; i++) {
			if(hasVisited[i]) {
				continue;
			}
			midarr.add(nums[i]);
			hasVisited[i] = true;
			backtracking(hasVisited, midarr, alarr, nums);
			midarr.remove(midarr.size() - 1);
			hasVisited[i] = false;
		}
	}
}

运行结果:

在这里插入图片描述

其他同等解法的题目:

257. 二叉树的所有路径
79. 单词搜索
93. 复原 IP 地址
17. 电话号码的字母组合

注:仅供学习参考!

题目来源:力扣

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

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

相关文章

SpringBoot 接口加密解密,新姿势!

1. 介绍 在我们日常的Java开发中&#xff0c;免不了和其他系统的业务交互&#xff0c;或者微服务之间的接口调用 如果我们想保证数据传输的安全&#xff0c;对接口出参加密&#xff0c;入参解密。 但是不想写重复代码&#xff0c;我们可以提供一个通用starter&#xff0c;提…

Spring Boot 还在用 if 校验参数?

本文会详细介绍Spring Validation各种场景下的最佳实践及其实现原理&#xff0c;死磕到底&#xff01; 简单使用 Java API规范(JSR303)定义了Bean校验的标准validation-api&#xff0c;但没有提供实现。hibernate validation是对这个规范的实现&#xff0c;并增加了校验注解如…

Linux内核--链表结构

一、前言 Linux内核链表结构是一种双向循环链表结构&#xff0c;与传统的链表结构不同&#xff0c;Linux内核链表结构仅包含前驱和后继指针&#xff0c;不包含数据域。使用链表结构&#xff0c;仅需在结构体成员中包含list_head*成员就行&#xff1b;链表结构的定义在linux…

ABAP学习笔记之——第八章:报表程序

一、程序属性 创建程序类型&#xff1a; 状态&#xff1a; 根据程序状态不能使用特定 Utility。例如&#xff0c;选择系统程序&#xff0c;则不能使用 debug 功能 权限组&#xff1a; 分配程序执行/修改相关的权限组。若是安全相关程序有必要设置权限组。 逻辑数据库&…

C/C++中的内存管理

目录 C/C内存分布 C语言中动态内存管理方式 malloc/calloc/realloc和free C内存管理方式 new/delete操作内置类型 new/delete操作自定义类型 operator new 与 operator delete new/delete实现原理 内置类型 自定义类型 定位new表达式&#xff08;placement-new&…

[附源码]Python计算机毕业设计Django路政管理信息系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

MySQL 从入门到实战讲解,京东 T5 大咖学习笔记分享,看完我哭了

数据库是一个综合系统&#xff0c;其背后是发展了几十年的数据库理论。也许你会觉得数据库并不难&#xff0c;因为你可以熟练地写出 SQL&#xff0c;也可以在各个客户端里玩得游刃有余。但就以最常见的 MySQL 为例&#xff0c;作为程员&#xff0c;你在使用 MySQL 的过程中&…

「Redis」04 发布和订阅

笔记整理自【尚硅谷】Redis 6 入门到精通 超详细 教程 Redis——发布和订阅 1. 什么是发布和订阅 Redis 发布订阅&#xff08; pub/sub &#xff09;是一种消息通信模式&#xff1a;发送者&#xff08; pub &#xff09;发送消息&#xff0c;订阅者&#xff08; sub &#xf…

[附源码]Python计算机毕业设计Django环境保护宣传网站

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

matlab使用移动平均滤波器、重采样和Hampel过滤器进行信号平滑处理

此示例显示如何使用移动平均滤波器和重采样来隔离每小时温度读数的时间周期分量的影响&#xff0c;以及从开环电压测量中消除不需要的线路噪声。 最近我们被客户要求撰写关于信号平滑处理的研究报告&#xff0c;包括一些图形和统计输出。 该示例还显示了如何使用Hampel过滤器…

新时期我国信息技术产业的发展【技术论文,纪念长者,2008】

2008年10月&#xff0c;江泽民在《上海交通大学学报》发表了一篇题为《新时期我国信息技术产业的发展》的论文。作为上海交通大学1947届电机工程系的毕业生&#xff0c;发表这篇论文时&#xff0c;这位曾改变中国的长者已是82岁高龄。在这篇论文中&#xff0c;江泽民提出了“未…

URLDNS链

听说这个链子是最简单的链子之一了&#xff0c;但是却是来来回回看了好多遍才勉强看明白。 在 ysoserial 中我们可以看见链子是这样的&#xff1a; *Gadget Chain: * HashMap.readObject() * HashMap.putVal() * HashMap.hash() * URL.hashCode() 简单流程&#xff1a; 1.Hash…

HTML这一篇就够啦~

HTML这一篇就够啦HTML1、基础认知2、排版标签2.1 标题标签2.2 段落标签2.3 换行标签2.4 水平线标签3、文本格式化标签4、媒体标签4.1 图片标签4.2 路径4.3 音频文件4.4 视频文件5、链接标签6、列表标签、6.1 无序列表&#xff08;最常用&#xff09;6.2 有序列表&#xff08;偶…

2021.06青少年软件编程(Python)等级考试试卷(三级)

2021.06青少年软件编程(Python)等级考试试卷(三级) 一、单选题(共25题,每题2分,共50分) 1.关于open()函数的参数,下列描述正确的是?( D ) A. "w+" 以十六进制格式打开一个文件只用于写入 B. "r+"打开一个文件用于读写。文件指针将会放在文件…

ZMQ之自杀的蜗牛模式和黑箱模式

一、检测慢订阅者&#xff08;自杀的蜗牛模式&#xff09; 在使用发布-订阅模式的时候&#xff0c;最常见的问题之一是如何处理响应较慢的订阅者。理想状况下&#xff0c;发布者能以全速发送消息给订阅者&#xff0c;但现实中&#xff0c;订阅者会需要对消息做较长时间的…

springboot如何增加 application.yml配置文件

新建springboot 项目&#xff0c;默认项目的配置文件为application.properties。 需要将application.properties 修改为application.yml配置文件。 注意&#xff1a; 我发现直接将application.properties文件重命名为application.yml。 新的application.yml没有配置功能的属…

Compose 动画艺术探索之属性动画

本篇文章是此专栏的第三篇文章&#xff0c;如果想阅读前两篇文章的话请点击下方链接&#xff1a; Compose 动画艺术探索之瞅下 Compose 的动画Compose 动画艺术探索之可见性动画 Compose的属性动画 属性动画是通过不断地修改值来实现的&#xff0c;而初始值和结束值之间的过…

Java项目:ssm实验室设备管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 ssm实验室设备管理系统。前台jsplayuieasyui等框架渲染数据、后台java语言搭配ssm(spring、springmvc、mybatis、maven) 数据库mysql5.7、8.0版…

java - 数据结构,双向链表 - LinkedList

一、双向链表 &#xff08;不带头&#xff09; 无头双向链表&#xff1a;在Java的集合框架库中LinkedList底层实现就是无头双向循环链表 双向链表 和 单向链表的区别&#xff0c;就在于 双向 比 单向 多个 一个前驱地址。而且 你会发现 正因为有了前驱地址&#xff0c;所以所…

centos 安装和卸载 webmin

在centos里安装webmin 选择安装最新版本的安装包 官方下载路径可以查看下载版本http://download.webmin.com/download/yum/ wget http://download.webmin.com/download/yum/webmin-2.010-1.noarch.rpm如果安装提示 错误: 无法验证 prdownloads.sourceforge.net 的由 “/CUS…