出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。
按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:
“123”
“132”
“213”
“231”
“312”
“321”
给定 n 和 k,返回第 k 个排列。
//对于数量为n的数据,全排列一共有n!种,并且,对于1.....n的每一个数字作为开头有(n-1)!种情况,并且是按顺序进行排列,所以根据k与阶乘的关系,
// 我们可以计算出从前到后当前位置应该出现的坐标,并且不可重复使用。
//
public String getPermutation(int n, int k) {
List<String>nums=new ArrayList<>();
String ans="";
int count[]=new int[n];
count[0]=1;
//由低到高计算出现的次数
for(int i=1;i<n;i++){
count[i]=count[i-1]*i ;
//初始化数组链表
nums.add(Integer.toString(i));
}
nums.add(Integer.toString(n));
//将k的起始位置索引设置为0
k-=1;
for(int i=n-1;i>-1;--i){
int index=k/count[i];
k-=index*count[i];
ans+=nums.get(index);
nums.remove(index);
}
return ans;
}