LeetCode如何解决第k个排列问题
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,小编给大家分享一下LeetCode如何解决第k个排列问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!题目给出集合 [1,
千家信息网最后更新 2025年12月01日LeetCode如何解决第k个排列问题
小编给大家分享一下LeetCode如何解决第k个排列问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
题目
给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。
按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:
"123""132""213""231""312""321"
给定 n 和 k,返回第 k 个排列。
说明:
给定 n 的范围是 [1, 9]。给定 k 的范围是[1, n!]。
示例 1:
输入: n = 3, k = 3输出: "213"
示例 2:
输入: n = 4, k = 9输出: "2314"
思路
深度优先搜索(DFS)+ 剪枝
深度优先搜索: 可以理解为暴力法遍历矩阵中所有字符串可能性。DFS 通过递归,先朝一个方向搜到底,再回溯至上个节点,沿另一个方向搜索,以此类推。
剪枝: 在搜索中,遇到 这条路不可能和目标字符串匹配成功 的情况(例如:此矩阵元素和目标字符不同、此元素已被访问),则应立即返回,称之为 可行性剪枝 。
步骤
如果 kk 大于这一个分支将要产生的叶子结点数,直接跳过这个分支,这个操作叫「剪枝」
如果 kk 小于等于这一个分支将要产生的叶子结点数,那说明所求的全排列一定在这一个分支将要产生的叶子结点里,需要递归求解
代码
class Solution { public String getPermutation(int n, int k) { //初始化阶乘数组 int[] factorial = new int[n+1]; calculateFactorial(factorial,n); //查找全排列的布尔数组 boolean[] temp = new boolean[n+1]; Arrays.fill(temp,false); //动态字符串 StringBuilder path = new StringBuilder(); dfs(temp,factorial,0,path,k,n); return path.toString(); } private void dfs(boolean[] temp,int factorial[],int index,StringBuilder path,int k,int n){ if(index == n){ return; } //全排列个数 int cnt = factorial[n-1-index]; for(int i = 1; i <= n; i++){ if(temp[i]){ continue; } //当时全排列个数 if(cnt < k){ k -= cnt; continue; } path.append(i); temp[i] = true; dfs(temp,factorial,index+1,path,k,n); return; } } //计算阶乘数组 private void calculateFactorial(int[] factorial, int n){ factorial[0] = 1; for(int i = 1; i <= n; i++){ factorial[i] = factorial[i-1]*i; } }}以上是"LeetCode如何解决第k个排列问题"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
分支
字符
搜索
元素
叶子
字符串
数组
篇文章
问题
个数
内容
情况
方向
深度
点数
目标
矩阵
示例
范围
阶乘
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
郑州软件开发定制公司哪家强
游戏赚钱软件开发
如何使用guid数据库行标识
武汉计算机网络技术学校
嵌入式和网络技术差别
玉田专业性软件开发常见问题
软件开发需求调研模板
网络安全演习成绩
芜湖知名网络技术
株洲服务器软件工程师寒假班
数据库技术三级考什么
电视控制软件开发
小学生网络安全宣传内容
extjs 数据库图片字段
网络安全龙头股还有哪些
网络安全学院院徽
丽台Q6001u服务器
云服务器做网页
golang与数据库连接
r语言访问数据库
服务器管理需要做什么
我的世界服务器配置文件怎么修改
应用软件开发行业分析
安装数据库提示必须重启
数据库查询不在范围内
服务器代理加盟
qq自由幻想服务器版本不一致
学校计算机及网络技术培训班
成都oa软件开发
网络技术面试时谈谈优缺点