标签:数字 Sequence permutation sequence 60 kth Permutation 排序 213
Description
The set [1, 2, 3, ..., n] contains a total of n! unique permutations.
By listing and labeling all of the permutations in order, we get the following sequence for n = 3:
"123"
"132"
"213"
"231"
"312"
"321"
Given n and k, return the kth permutation sequence.
Example
Input: n = 3, k = 3
Output: "213"
分析
刚开始决定采用 next permutation 进行求解。 考虑到 next permutation 通常分为 2 个部分,第一步是将某个数替换前面第一个小于它的数,第二部是进行刚替换过数字右边数字的排序。
考虑到排序比较耗时,在求第 kth 的排序时,时间复杂度会变成 k * n log n 。决定采用预先计算的方式进行优化,比如知道, [k1th, k2th, k3th ....] 对应的排列组合, 找到第一个小于 kth
的 kxth 排练组合,以此为基础进行计算。 想到这里,突然灵机一动。有了下面更好的优化
对于 n 个数的全排练
以 1 为开始数字的全排列有 (n-1) !
以 2 为开始的有 (n-1)!
.........
假设 n 为 9, 现在计算 kth 开始的数字是以 5 为开始数字。 nkth 为 kth - 5 * 9 !。 新的数字组合从 [1,2,3,4, 6,7,8,9] , 以此类类推,计算 nkth 对应的组合数字!!
Tips
1 <= n <= 9
1 <= k <= n!
总结
标签:数字,Sequence,permutation,sequence,60,kth,Permutation,排序,213 来源: https://www.cnblogs.com/tmortred/p/15756632.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。