LeetCode 60.第k个排列 Java实现

Java实现 LeetCode 60 第k个排列 60. 第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 = ... 阅读详情

题目


给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。

按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:

  1. "123"
  2. "132"
  3. "213"
  4. "231"
  5. "312"
  6. "321"

给定 n 和 k,返回第 k 个排列。

说明:

  • 给定 n 的范围是 [1, 9]。
  • 给定 k 的范围是[1,  n!]。

示例 1:

输入: n = 3, k = 3
输出: "213"

示例 2:

输入: n = 4, k = 9
输出: "2314"

思路


这道题采用了康托展开的方法,推荐别的大佬的博客:康托展开及其逆运算 详解,通过他的博客写出了下面的代码。

代码


class Solution {
    public String getPermutation(int n, int k) {
        int  fac[] = {1,1,2,6,24,120,720,5040,40320};
        boolean flag[]=new boolean[10];
        n--;
        k--;
        int next;
        String str="";
        for(int i=n;i>0;i--){
            next=k/fac[i];
            k=k%fac[i];
            int temp=next+1;
            for(int j=0;j<temp;j++){
                if(flag[j])
                    temp++;
            }
            flag[temp-1]=true;
            str+=temp;
        }
        for(int i=0;i<=n;i++){
            if(!flag[i]){
                str+=(i+1);
                break;
            }
        }
        return str;
    }
}

 

【困难】力扣算法题解析LeetCode60:排列序列 本文提出了一种高效求解第k个排列的数学方法,避免枚举所有排列。核心思路是逐位确定数字:预处理阶乘值,初始化可用数字列表,通过计算索引k/(m-1)!确定当前位数字,移除已用数字并更新k为余数,直至构建完整排列。Java实现利用阶乘数组和动态调整的可用数字列表,时间复杂度O(n²),空间复杂度O(n)。示例展示了n=3时第3个排列为"213"的计算过程,适用于n≤9的场景。该方法显著优化了传统回溯法的性能,适用于大规模排列查询。 阅读详情

相关推荐

leetcode:60. 第k个排列(回溯)

题目: 分析: 还是根据排列组合基本问题全排列 II中给的两种方法改编。 代码1(朴素直接修改原来的模板): int all=-1; int f(int nums,vector n,int c,int k,vector& v) {//该往c位置放了 if(c==n.size()-1){ all++; if(all==k-1) return 1; return 0; } for(int i=1;i<=nums;i++) { if(n[i]) continue; n[i]=1; v[c]=i; int kk=f(nums,n,c+1,k,v); if(kk

LeetCode(60):第k个排列 Permutation Sequence(Java)

2019.12.19 LeetCode 从零单刷个人笔记整理(持续更新) github:https://github.com/ChopinXBP/LeetCode-Babel 之前有做过两道排列相关的题目: LeetCode(46):全排列 Permutations(Java) LeetCode(31):下一个排列 Next Permutation(Java) 但是,单纯依靠之前的全排列方法做出...

NJU_ChopinXBP的博客 403

OS实验xv6 6.S081 开坑

OS实验xv6 6.S081 开坑 终于把xv6 2019 6.S081做完了,网络部分没有写,因为有计网实验了。怎么说呢,xv6的坑有点多,能做完多亏了:和我同学ljj交流,参考RedemptionC老哥的博客(他写的非常详细,遗憾的是,他好像没有写mmap),再者就是参考这位老哥的做法(没有源码,写得不是特别详细,不过有借鉴作用,mmap就是借鉴了他的思想)……废话不多说了,直接开始。 实验指导 首推RedemptionC的博客 这位老哥的个人博客 xv6 6.S081官网(后面的实验都要参考官网

不定期更新系统使用、编程小技巧,哔哩哔哩账号:https://space.bilibili.com/399455629,欢迎关注 4493

LeetCode60.第k个排列(Java)

题目描述 给出集合 [1,2,3,…,*n*],其所有元素共有 n! 种排列。 按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下: 1. `"123"` 2. `"132"` 3. `"213"` 4. `"231"` 5. `"312"` 6. `"321"` 给定 n 和 k,返回第 k 个排列。 说明: 给定n的范围是[1,9]. 给定k的范围是[1,n!]. 解题思路 这道题明显考察的是全排列,但是用递归暴力找出所有排序是比较不好写的,因为要返回字符串String,

老马厩 332

血管分割中的直径平衡难题:从clDice到cbDice的演进与实践

本文探讨了血管分割中的直径平衡难题,详细分析了从clDice到cbDice的技术演进与实践。通过引入半径感知权重和边界对齐惩罚,cbDice在保持拓扑完整性的同时提升了几何敏感度,显著改善了细小血管的分割效果。文章还分享了在nnU-Net中实现cbDice的工程细节,包括GPU加速骨架提取和多任务损失组合策略,为医学影像分析提供了重要参考。

weixin_29170327的博客 244

麦克风声源定位原理_声源定位—如何定位到噪声根源?

前言TPA(传递路径分析)专题系列已经开篇。其遵循方法论:源(Source)——路径(Path)——响应(Receiver)有人说TPA好,它可以识别出路径处甚至源的载荷特征,可以量化各个路径的贡献量。有人说声源定位好,不管东西南北中,“源”自其中。但是,声源定位识别出来色彩丰富的一个结果,这结果被您拿来应付工作了,还是真正帮您解决了问题?声源定位定位到了噪声的根源了么?对于一些声源现,...

weixin_39943678的博客 3974

JAVA程序设计: 第k个排列(LeetCode:60)

给出集合[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 输出:...

信仰.的博客 614

WSL2 Ubuntu 22.04安装NVIDIA驱动避坑指南:从驱动版本选择到CUDA环境验证

本文详细介绍了在WSL2 Ubuntu 22.04中安装NVIDIA驱动和配置CUDA环境的完整流程,包括驱动版本选择、环境变量设置以及常见问题解决方案。通过本指南,用户可以避免常见的安装陷阱,确保GPU加速环境正确配置,适用于深度学习开发和CUDA编程。

weixin_28419039的博客 464

leetcode:60. 排列序列

如上图,n = 4 ,k = 10,要找的是第 10 个。我们把数字都放到 nums 数组[1,2,3,4],索引 0 对应数字 1,有一个错位,所以把 k 减 1 处理。现在,剩下 3 个数字,[1, 3, 4],继续分组,如下图,更新一下 k,看看落入哪一组,重复上述步骤,确定出下一个数字,直到确定完 n 个数字。的取整,等于索引 1,对应nums数组的2,因此,确定了第一个数字2。事实上,我们不必求出所有的全排列。对于给定的n和k,我们不妨从左往右确定第k个排列中的每一个位置上的元素到底是什么。...

OceanStar的博客 420

《备考系统分析师》 - 专栏介绍和目录

本专栏提供软考高级系统分析师全套备考资料,包含四大核心内容:1.详细考点梳理(覆盖基础知识、关键技术、案例实践三大模块16个章节);2.历年真题及解析(2009-2022年所有真题含综合知识、案例分析和论文);3.100+篇高质量论文范文;4.预测模拟题。早鸟价仅需9.9元,可节约80%资料搜集时间,帮助考生高效备考、顺利通过考试。专栏持续更新,有问题可随时联系作者。

数据知道的博客 1万+

基于Simulink实现电动汽车电机驱动系统的建模与仿真

通过上述步骤,我们成功实现了基于Simulink的电动汽车电机驱动系统的建模与仿真。该系统能够全面评估电机驱动系统的性能,验证控制策略的有效性,并通过优化设计提高车辆的动力性和效率。引入智能预测:结合人工智能技术,实现更智能的控制策略。扩展功能:增加对多种电机类型的支持,提升系统通用性。实验验证:将仿真模型应用于实际硬件,进行实验验证,评估其在实际工况下的表现。

xiaoheshang_123的博客 319

Leetcode--Java--60. 排列序列

题目描述 给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。 按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下: “123” “132” “213” “231” “312” “321” 给定 n 和 k,返回第 k 个排列。 样例描述 示例 1: 输入:n = 3, k = 3 输出:"213" 示例 2: 输入:n = 4, k = 9 输出:"2314" 示例 3: 输入:n = 3, k = 1 输出:"123" 思路 回溯法 全局记录次数以及是否继

Sherlock的博客 350

java项目反编译工具记录,共计6个工具

java项目反编译工具记录,共计6个工具

橙-极纪元-JJYCheng 1802

Leetcode算法Java全解答--60. 第k个排列

Leetcode算法Java全解答–60. 第k个排列 文章目录Leetcode算法Java全解答--60. 第k个排列题目想法结果总结代码我的答案大佬们的答案测试用例其他 题目 给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。 按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下: “123” “132” “213” “231” “312” “321” 给定...

cmqwan的博客 9033

沙猫群优化算法(SCSO)详解:从沙漠生存智慧到全局优化引擎

本文详细介绍了沙猫群优化算法(SCSO),这是一种新型元启发式优化算法,灵感来源于沙猫在沙漠环境中的卓越狩猎行为。SCSO通过模拟沙猫的低频探测能力和精确攻击策略,将优化问题转化为搜索和捕获"猎物"的过程。算法核心包括探索阶段(全局搜索)和开发阶段(局部精细搜索),通过灵敏度范围模型和自适应控制参数实现两者的平衡。SCSO具有参数简单、收敛性能好等优点,适用于解决复杂全局优化问题。

qq_42212808的博客 202

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Leetcode60. 第k个排列

Leetcode60. 第k个排列 题目: 给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。 按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下: “123” “132” “213” “231” “312” “321” 给定 n 和 k,返回第 k 个排列。 说明: 给定 n 的范围是 [1, 9]。 给定 k 的范围是[1, n!]。 示例 1: 输入:...

会流泪de鱼的博客 186

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

LeetCode60-20.9.5-第k个排列

链接:LeetCode60 过程:意识到暴力不可取,想直接算第k个,看了看题解。 思路:问题转化,缩小求解规模,抛弃无用计算 代码: class Solution { public String getPermutation(int n, int k) { int[] factorial=new int[n]; factorial[0]=1; for(int i=1;i<n;i++)factorial[i]=factorial[i-1]*i;

RedDevill的博客 141

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Leetcode.60 排列序列

回溯问题

感觉画质不如...原神的博客 372

leetcode60.排列序列

leetcode60.排列序列

qq_55713959的博客 495

[LeetCode]60. 排列序列(java实现)模拟题

[LeetCode]60. 排列序列(java实现)模拟题1. 题目2. 读题(需要重点注意的东西)3. 解法4. 可能有帮助的前置习题5. 所用到的数据结构与算法思想6. 总结 1. 题目 2. 读题(需要重点注意的东西) 思路: 每一位每一位来看,举个例子,当n = 4,k = 10时: 当第一位填1时,后面有(4-1)!= 3 *2 * 1 = 6种排列,此时10 > 6,说明第一位填1的6个排列都在第10个排列的前面,因此第一位填2; 第二位填1时,后面有(3-1)! = 2 * 1 = 2

cloud的博客 314

Leetcode 枚举 46. Permutations Leetcode 60

链接 :Leetcode 46  依然是分而治之的思想,将大问题转化为小问题进行处理。 注意: 边界条件,采用迭代形式写函数时需要注意迭代出口的设计 但这个版本效率不是很高 import java.util.ArrayList; import java.util.List; public class Solution { public static void main(

独钓寒江雪 414

LeetCode-60. Permutation Sequence [C++][Java]

The set[1, 2, 3, ...,n]contains a total ofn!unique permutations. Givennandk, return thekthpermutation sequenc

贫道绝缘子的博客 457

LeetCode: 60. Permutation Sequence(Medium)

1. 原题链接 https://leetcode.com/problems/permutation-sequence/description/ 2. 题目要求 给出整数 n和 k ,k代表从1到n的整数所有排列序列中的第k个序列,返回String类型的第k个序列 3. 解题思路 首先我们要知道这个序列是按照什么规律排列下去的,假如此时n=4,k= 21,n=4时所有的排列如下...

aysk1112的博客 175
上一篇: Vue学习笔记(七)路由
下一篇: Vue学习笔记(八)插槽
前端小黑
博客等级 码龄9年 148粉丝 222原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值