leetcode 46. Permutations(排列)

news2024/11/18 3:33:44

在这里插入图片描述
返回数组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;
        }
        //combination
        for(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;
        }
        //combination
        for(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;
    }
}

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

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

相关文章

P1257 平面上的最接近点对

题目 思路 详见加强加强版 代码 #include<bits/stdc.h> using namespace std; #define int long long const int maxn4e510; pair<int,int> a[maxn]; int n; double d1e16; pair<int,int> vl[maxn],vr[maxn]; void read() { cin>>n;for(int i1;i<…

/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28‘ not found

某项目中&#xff0c;我要给别人封装一个深度学习算法的SDK接口&#xff0c;运行在RK3588平台上&#xff0c;然后客户给我的交叉编译工具链是 然后我用他们给我的交叉编译工具链报下面的错误&#xff1a; aarch64-buildroot-linux-gnu-gcc --version /data/chw/aarch64/bin/cca…

Race竞争型漏洞

Race竞争介绍 竞争型漏洞&#xff08;Race Condition Vulnerability&#xff09;是一种存在于并发编程中的安全漏洞。它通常发生在多个线程或进程同时访问和修改共享资源时&#xff0c;由于执行顺序的不确定性而导致意外的结果。 竞争型漏洞的原理可以用以下步骤来解释&#x…

该选择WPF 还是 Winform?

WPF和WinForms都是.NET平台下的桌面应用程序开发框架&#xff0c;它们各有特点&#xff0c;适用于不同的场景和需求。下面是对WPF和WinForms的一些比较和优劣势&#xff1a;WPF&#xff08;Windows Presentation Foundation&#xff09;&#xff1a;WPF具有强大的图形渲染能力&…

ssm客户关系管理系统java公司企业房屋销售出租jsp源代码mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 ssm客户关系管理系统 系统有1权限&#xff1a;管理员…

计算机网络(3) --- 网络套接字TCP

计算机网络&#xff08;2&#xff09; --- 网络套接字UDP_哈里沃克的博客-CSDN博客https://blog.csdn.net/m0_63488627/article/details/131977544?spm1001.2014.3001.5501 目录 1.TCP 1.服务端接口介绍 1.listen状态 2.accept获取链接 2.客户端接口介绍 2.TCP的服务器…

力扣:48. 旋转图像(Python3)

题目&#xff1a; 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&…

基于ANACONDA安装用于Python编程的Spyder集成开发环境的方法步骤详解

基于ANACONDA安装用于Python编程的Spyder集成开发环境的方法步骤详解 Python作为一种当下流行的编程语言&#xff0c;其编辑器有很多种&#xff0c;本文介绍基于ANACONDA的安装Spyder编辑器的方法步骤。Spyder集成开发环境&#xff0c;和其他的Python开发环境相比&#xff0c;…

django bootstrap html实现左右布局,带折叠按钮,左侧可折叠隐藏

一、实现的效果 在django项目中,需要使用bootstrap 实现一个左右分布的布局,左侧区域可以折叠隐藏起来,使得右侧的显示区域变大。(为了区分区域,左右加了配色,不好看的修改颜色即可) 点击折叠按钮,左侧区域隐藏,右侧区域铺满: 二、实现思路 1、使用col-md属性,让左…

JavaEE初阶之文件操作 —— IO

目录 一、认识文件 1.1认识文件 1.2树型结构组织 和 目录 1.3文件路径(Path) 1.4其他知识 二、Java 中操作文件 2.1File 概述 2.2代码示例 三、文件内容的读写 —— 数据流 3.1InputStream 概述 ​3.2FileInputStream 概述 3.3代码示例 3.4利用 Scanner 进行字…

procreate怎么插入图片?如何将图片插入到procreate图层里?

Procreate是一款运行在iPadOS上的强大的绘画应用软件&#xff0c;让创意人士随时把握灵感&#xff0c;通过简易的操作系统&#xff0c;专业的功能集合进行素描、填色、设计等艺术创作。procreate怎么插入图片&#xff1f;如何将图片插入到procreate图层里&#xff1f; 打开平板…

【二分+滑动窗口优化DP】CF883 I

Problem - 883I - Codeforces 题意&#xff1a; 思路&#xff1a; 首先&#xff0c;要让最大值最小&#xff0c;很显然要二分 那么就相当于有了一个极差的限制&#xff0c;看能不能分组&#xff0c;每组至少m个元素 那么就是考虑分段DP&#xff0c;直接n^2很容易写 但是n …

偶发odbc.ini文件被清空

现象&#xff1a;某个现场 odbc.ini 莫名其妙被清空&#xff0c;偶发情况&#xff0c;大概几周出现一次。 unixodbc官网地址–> https://www.unixodbc.org/ //2.3.7 BOOL _odbcinst_SystemINI( char *pszFileName, BOOL bVerify ) {FILE *hFile;char …

这个Python项目让古诗变得更易读,看完《长安三万里》惊艳了!

大家好&#xff0c;这里是程序员晚枫&#xff0c;最近在小红薯更新生活VLOG&#xff0c;被骂惨了&#xff01; 周末和小明去看了一场电影&#xff1a;《长安三万里》。 看电影的过程中发生了一件尴尬的事情&#xff1a;很多诗词里的字我都不认识。 回家以后&#xff0c;我赶…

机器学习深度学习——非NVIDIA显卡怎么做深度学习(坑点排查)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——数值稳定性和模型化参数&#xff08;详细数学推导&#xff09; &#x1f4da;订阅专栏&#xff1a;机器…

systemverilog中fork..join, join_any, join_none的用法和解析

1、fork.. join, join_any以及join_none的用法进行总结 1.1、 fork..join fork..join: 必须等到statement1&#xff0c;statement2&#xff0c;statement3全部执行完之后&#xff0c;statement4才可以执行。fork…join内的所有语句都是并发执行&#xff08;对于begin…end内…

浪涌保护器10/350us和8/20us是什么意思,两者有何区别?

在选择浪涌保护器的时候&#xff0c;浪涌保护器的防雷能力放电电流后面的单位一般是KA&#xff0c;KA后面还有个参数是10/350us或者8/20us&#xff0c;大家可能对这2个参数不太熟悉。 那么&#xff0c;浪涌保护器10/350us和8/20us是什么意思&#xff0c;两者有何区别呢&#x…

025 - max()函数

MAX() 函数: MAX 函数返回一列中的最大值。NULL 值不包括在计算中。 SQL MAX() 语法: SELECT MAX(column_name) FROM table_name; 注释&#xff1a;MAX 也可用于文本列&#xff0c;以获得按字母顺序排列的最高或最低值。 -- 实际操作&#xff08;查询salary的最大值&#x…

【十万个等保小知识】等保测评报告是在等保整改之后发吗?

等保2.0政策已经严格落地执行了一段时间&#xff0c;但大家对于等保2.0政策还存在很多疑问&#xff0c;例如等保测评报告是在等保整改之后发吗&#xff1f;今天我们小编就来为大家简单回答一下&#xff0c;仅供参考哦&#xff01; 等保测评报告是在等保整改之后发吗&#xff1f…

uniapp echarts 点击失效

这个问题网上搜了一堆&#xff0c;有的让你降版本&#xff0c;有的让你改源码。。。都不太符合预期&#xff0c;目前我的方法可以用最新的echarts。 这个方法就是由npm安装转为CDN&#xff0c;当然你可能会质疑用CDN这样会不稳定&#xff0c;那如果CDN的地址是本地呢&#xff1…