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

leetcode 46. Permutations(排列)

在这里插入图片描述
返回数组nums中数字的所有可能的排列组合。

思路:

排列组合这种一般会想到DFS。

这个排列中每个数字只能用一次,
可用如下DFS流程

stack.push(num);
dfs(nums, num);
stack.pop();

退出条件:
当stack的size和nums数组一样时,说明已经完成了一个排列组合,保存结果退出当前dfs。
否则遍历数组,进入新一轮dfs.

每个数字只能用一次,所以用一个visited数组记录数字是否已经使用过。

class Solution {List<List<Integer>> res = new ArrayList<>();public List<List<Integer>> permute(int[] nums) {Stack<Integer> st = new Stack<>();boolean[] visited = new boolean[nums.length];dfs(nums, st, visited);return res;}void dfs(int[] nums, Stack<Integer> st, boolean[] visited){if(st.size() == nums.length) {List<Integer> list = new ArrayList<>(st);res.add(list);return;}//combinationfor(int i = 0; i < nums.length; i++) {if(visited[i]) continue;st.push(nums[i]);visited[i] = true;dfs(nums, st, visited);st.pop();visited[i] = false;}}
}

也可以不用stack. 直接在nums数组上模拟stack.
把需要装入stack的数字交换到前面,用一个指针模拟栈顶。
此方法更快。

class Solution {List<List<Integer>> res = new ArrayList<>();public List<List<Integer>> permute(int[] nums) {solve(nums, 0);return res;}void solve(int[] nums, int start){if(start == nums.length-1) {List<Integer> list = new ArrayList<>();for(int num : nums) list.add(num);res.add(list);return;}//combinationfor(int i = start; i < nums.length; i++) {swap(nums, start, i);solve(nums, start+1);swap(nums, start, i);}}void swap(int[] nums, int i, int j) {int tmp = nums[i];nums[i] = nums[j];nums[j] = tmp;}
}

相关文章:

leetcode 46. Permutations(排列)

返回数组nums中数字的所有可能的排列组合。 思路&#xff1a; 排列组合这种一般会想到DFS。 这个排列中每个数字只能用一次&#xff0c; 可用如下DFS流程 stack.push(num); dfs(nums, num); stack.pop();退出条件&#xff1a; 当stack的size和nums数组一样时&#xff0c;说…...

5、二叉树

二叉树遍历 递归序 public static void f(Node head) {if (head == null) {return;}f(head.left);f(head.right); }前中后遍历_递归 public static void preOrderRecur(Node head) {if (head == null) {return;}System.out.print(head.value + " ");preOrderRecur…...

Doris比MySQL快的原因

简介 在数据存储和数据分析领域&#xff0c;MySQL和Doris是比较流行的数据库管理系统的代表。 在如今的大数据时代&#xff0c;数据量和数据分析的速度是很重要的。 在数据分析和数据处理中&#xff0c;Doris比MySQL快&#xff0c;这个问题一直是许多人关心的问题。 Doris的数…...

Prometheus + Grafana安装

Prometheus是一款基于时序数据库的开源监控告警系统&#xff0c;非常适合Kubernetes集群的监控。Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态&#xff0c;任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做非常适合做…...

二十三种设计模式第二十一篇--解释器模式

解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为设计模式&#xff0c;它用于定义一种语言的语法结构和解释器&#xff0c;使得可以解释并执行特定的语法规则。该模式可以将复杂的语言表达式分解为更小的语法单元&#xff0c;并定义其解释过程。 解释器模式的…...

PHP8的数据类型转换-PHP8知识详解

什么是数据类型转换&#xff1f; 答&#xff1a;数据从一个类型转换成另外一个类型&#xff0c;就是数据类型转换。 在PHP8中&#xff0c;变量的类型就是由赋值决定的&#xff0c;也就是说&#xff0c;如果 string 赋值给 $var&#xff0c;然后 $var 的类型就是 string。之后…...

2023 电赛 E 题 K210 方案

第一章&#xff1a;K210 介绍 K210芯片是一款基于RISC-V架构的嵌入式人工智能芯片&#xff0c;具备低功耗、高性能的特点。它拥有强大的图像处理和机器学习能力&#xff0c;适用于边缘计算设备和物联网应用。为了方便开发者&#xff0c;K210芯片提供了丰富的外设接口&#xff…...

Python的正则表达式re模块的compile()方法有什么作用?

re模块是Python标准库中的正则表达式模块&#xff0c;它提供了对正则表达式的支持。re.compile()是re模块的一个方法&#xff0c;用于将正则表达式编译成可复用的正则对象。 正则表达式是用来匹配和处理文本模式的强大工具。当你需要在字符串中查找、替换或者提取符合特定模式…...

SQL 语句中 left join 后用 on 还是 where,区别大了!

目录 情况 小结 举例 情况 前天写SQL时本想通过 A left B join on and 后面的条件来使查出的两条记录变成一条&#xff0c;奈何发现还是有两条。 后来发现 join on and 不会过滤结果记录条数&#xff0c;只会根据and后的条件是否显示 B表的记录&#xff0c;A表的记录一定会显…...

uni-app 微信小程序自定义导航栏

一、效果图 二、导航栏的组成 上面的导航栏主要由状态栏&#xff08;就是手机电量显示栏&#xff09;和小程序的导航栏组成&#xff0c;android手机一般为48px&#xff0c;ios手机一般为44px 三、开发步骤 1、设置navigationStyle:custom {"path": "pages/v…...

电缆故障检测仪技术参数

一、电缆故障测试仪的技术参数 1.采样方法&#xff1a;低压脉冲法、冲击闪络法、速度测量法 2.电缆长度&#xff1a;50m、300m、1km、2km、5km、10km、30km、60km 3.波速设置&#xff1a;交联乙烯、聚氯乙烯、油浸纸、不滴油和未知类型自设定 4.冲击高压&#xff1a;35kV及以下…...

固定资产管理软件

固定资产全生命周期管理软件采用先进的RFID技术&#xff0c;从采购、入库、借用、总结、清理到损坏等方面准确统计资产&#xff0c;突破过去手工统计的复杂性&#xff0c;节省资产资源&#xff0c;减少调查时间&#xff0c;确保资产管理工作的准确性和快速性。 固定资产管理软…...

云安全攻防(四)之 云原生技术

云原生技术 容器技术 容器与虚拟化 虚拟化&#xff08;Virtualization&#xff09;和容器&#xff08;Container&#xff09;都是系统虚拟化的实现技术&#xff0c;可实现系统资源的”一虚多“共享。容器技术可以理解成一种”轻量的虚拟化“方式&#xff0c;此处的”轻量“主…...

线上通过Nginx部署前端工程,并且配置SSL

介绍、为了更好的帮助大家学习&#xff0c;减少歧义,IP地址我就不隐藏了&#xff0c;公司也是我自己的公司。你们就别来攻击了。 下面给出步骤: 一、前期准备工作 通过在目标服务器上安装宝塔面板、安装redis、mysql、nginx、jdk环境等 1、 2、前端工程通过npm run build 打…...

直播预告 | 开源运维工具使用现状以及可持续产品的思考

运维平台自上世纪90年代开始进入中国市场&#xff0c;曾形成以传统四大外企&#xff1a;IBM、BMC、CA、HP为代表的头部厂商&#xff0c;还有一众从网管起家的国内厂商。2010年前后&#xff0c;出现了以Zabbix、Nagios、Cacti为代表的开源工具&#xff0c;后来又陆续出现了Prome…...

GPT带我学-设计模式-工厂模式

1 你好&#xff0c;请问你知道设计模式的工厂模式吗 当然知道&#xff0c;工厂模式是一种创建型设计模式&#xff0c;它提供了一种创建对象的方式&#xff0c;而不需要暴露对象创建的逻辑细节。工厂模式通过使用工厂类来创建对象&#xff0c;从而将对象的实例化逻辑与客户端代…...

Docker 安装 Tomcat

目录 一、查看 tomcat 版本 二、拉取 Tomcat Docker 镜像 三、创建 Tomcat 容器 四、访问 Tomcat 五、停止和启动容器 一、查看 tomcat 版本 访问 tomcat 镜像库地址&#xff1a;https://hub.docker.com/_/tomcat&#xff0c;可以通过 Tags 查看其他版本的 tomcat; 二、拉…...

seata注册到nacos(docker)

1、安装&#xff1a;docker run --name seata-server2 -p 8091:8091 -p 7091:7091 seataio/seata-server:1.5.1 复制seata-server2到服务器&#xff0c;然后过河拆桥 2、创建挂载目录 mkdir -p /ssy/seata_docker 3、将容器 resources文件挂载到宿主机 docker cp seata-server2…...

ffmpeg综合应用示例(五)——多路视频合并(Linux版本)

本文的目的为方便Linux下编译运行多路视频合成Demo 原文&#xff1a;ffmpeg综合应用示例&#xff08;五&#xff09;——多路视频合并 Ubuntu 20.04 ffmpeg version ffmpeg-4.4-x86_64 编译 export LD_LIBRARY_PATH$LD_LIBRARY_PATH:/home/workspace/dengzr/linux-x64/lib…...

Node.js-http模块服务端请求与响应操作,请求报文与响应报文

简单案例创建HTTP服务端&#xff1a; // 导入 http 模块 const http require("http"); // 创建服务对象 const server http.createServer((request, response) > {// 设置编码格式&#xff0c;解决中文乱码问题response.setHeader("content-type", &…...

WeClaw_42_Agent工具注册全链路:从BaseTool到意图识别的标准化接入

WeClaw_42_Agent工具注册全链路&#xff1a;从BaseTool到意图识别的标准化接入作者: WeClaw 开发团队 日期: 2026-03-29 版本: v1.0 标签: Agent 工具、BaseTool、意图识别、渐进式暴露、延迟注入&#x1f4d6; 摘要 本文系统讲解 WeClaw Agent 工具注册的完整链路。当需要将一…...

ESXI系统安装全流程详解:从U盘启动到网络配置

1. 制作ESXI系统U盘启动盘 准备一个容量至少8GB的U盘&#xff0c;建议使用USB3.0接口的高速U盘&#xff0c;这样写入速度会快很多。我实测过&#xff0c;用USB2.0的U盘写入一个ESXI镜像可能需要20分钟&#xff0c;而USB3.0通常5分钟就能搞定。 首先需要下载两个关键文件&#x…...

Evolutionary Architecture by Example:如何避免过度工程化陷阱

Evolutionary Architecture by Example&#xff1a;如何避免过度工程化陷阱 【免费下载链接】evolutionary-architecture-by-example Navigate the complex landscape of .NET software architecture with our step-by-step, story-like guide. Unpack the interplay between m…...

Qwen3-14B镜像部署避坑指南:RTX 4090D驱动/CUDA/内存精准匹配

Qwen3-14B镜像部署避坑指南&#xff1a;RTX 4090D驱动/CUDA/内存精准匹配 1. 镜像概述与核心优势 Qwen3-14B私有部署镜像是一款专为RTX 4090D显卡优化的开箱即用解决方案。这个镜像最大的特点就是解决了大模型部署中最让人头疼的环境配置问题。 想象一下&#xff0c;你拿到一…...

VS Code 效率技巧:符号导航快速定位代码

推荐阅读 技术总监悄悄秀了一把 VS Code 神技&#xff0c;被我狠狠学到了&#xff01; VS Code 又发布了一个 Agent 新玩具&#xff01; VS Code 1.110 官宣 AI 新特性&#xff1a;AI 直接调试浏览器&#xff01; VS Code 2026 效率秘籍&#xff1a;学完无敌&#xff01…...

从Java到AI Agent:传统后端工程师的下一站,不是学AI,是成为系统工程师!

文章探讨了在AI技术发展的背景下&#xff0c;传统后端工程师的转型方向。作者认为&#xff0c;未来的竞争焦点不再是单纯的技术能力&#xff0c;而是如何将AI技术融入现有系统&#xff0c;构建自动化系统。文章提出了AI Agent工程师的概念&#xff0c;强调系统工程能力的重要性…...

电商评论分析利器:GTE文本向量实战情感分析与产品问题挖掘

电商评论分析利器&#xff1a;GTE文本向量实战情感分析与产品问题挖掘 1. 电商评论分析的痛点与解决方案 电商平台每天产生海量用户评论&#xff0c;这些评论蕴含着消费者真实的产品体验和市场反馈。传统的人工分析方法面临三大挑战&#xff1a; 处理效率低&#xff1a;人工…...

SenseVoice-small实战教程:导出SRT/VTT字幕文件用于Premiere剪辑

SenseVoice-small实战教程&#xff1a;导出SRT/VTT字幕文件用于Premiere剪辑 你是不是经常遇到这样的烦恼&#xff1f;录了一段视频&#xff0c;或者拿到一段会议录音&#xff0c;想要给它配上精准的字幕&#xff0c;却发现自己要花几个小时去听写、校对、打时间轴&#xff1f…...

免费开源:如何用LiteDB.Studio高效管理嵌入式数据库?

免费开源&#xff1a;如何用LiteDB.Studio高效管理嵌入式数据库&#xff1f; 【免费下载链接】LiteDB.Studio A GUI tool for viewing and editing documents for LiteDB v5 项目地址: https://gitcode.com/gh_mirrors/li/LiteDB.Studio 在嵌入式数据库管理领域&#xf…...

使用AIVideo实现LaTeX学术报告自动转视频教程

使用AIVideo实现LaTeX学术报告自动转视频教程 1. 引言 作为一名科研工作者&#xff0c;你是否曾经为了准备学术会议的视频报告而头疼&#xff1f;传统的视频制作需要录制、剪辑、配音等多个繁琐步骤&#xff0c;耗时耗力。现在&#xff0c;通过AIVideo这个强大的AI视频创作平…...