https://leetcode-cn.com/problems/permutation-sequence/
给出集合 [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"
class Solution {
public String getPermutation(int n, int k) {
if(n==1){
return "1";
}
//动态数组存放1~n的值
List<Integer> list=new ArrayList<Integer>();
for(int i=1;i<=n;i++){
list.add(i);
}
String res="";
int index=0;
k=k-1;
//直至循环到k=0,即当前组的第一个
while(k>0){
//计算当前处于哪一组,即第一个数字是几
index=k/(jie(n-1));
//计算处于这组的第几个(0是第一个)
k=k-index*(jie(n-1));
//去掉一个数字后长度减1
n--;
//把首个数字加到res
res=res+String.valueOf(list.get(index));
//删去这个数字
list.remove(index);
}
//把剩下的数组按序添加输出
for(int x:list){
res=res+String.valueOf(x);
}
return res;
}
public int jie(int n){
int res=1;
while(n>0){
res=res*n;
n--;
}
return res;
}
}