/**
* 60. 第k个排列
* @author wsq
* @date 2020/09/05
给出集合 [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"
链接:https://leetcode-cn.com/problems/permutation-sequence
*/
package notsubmit;
public class GetPermutation {
public String getPermutation(int n, int k) {
StringBuffer sb = new StringBuffer();
boolean[] nArr = new boolean[n];
for(int i = 0; i < n; i++) {
nArr[i] = true;
}
int tmpK = k;
int tmpN = n;
int move = 0;
while(tmpK != 0 && tmpN > 0) {
int jc = jc(tmpN - 1);
if(jc >= tmpK) {
for(int i = 0; i < n; ++i) {
if(nArr[i] == true && move > 0) {
move--;
continue;
}
if(nArr[i] == true && move == 0) {
sb.append(i + 1);
nArr[i] = false;
tmpN--;
break;
}
}
}else {
move++;
tmpK = tmpK - jc;
}
}
return sb.toString();
}
public int jc(int n) {
int ans = 1;
for(int i = 1; i <=n; ++i) {
ans *= i;
}
return ans;
}
public static void main(String[] args) {
int n = 4;
int k = 9;
GetPermutation gp = new GetPermutation();
String ans = gp.getPermutation(n, k);
System.out.println(ans);
}
}
60. 第k个排列
最新推荐文章于 2025-11-24 17:02:03 发布
927

被折叠的 条评论
为什么被折叠?



