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 (ie, for n = 3):
"123"
"132"
"213"
"231"
"312"
"321"
Given n and k, return the kth permutation sequence.
Note: Given n will be between 1 and 9 inclusive.
返回第k个排好序的字符串 要是先将所有数字进行排序然后去第K个 显然复杂度较高 由于 每次可以根据 k与(n-1)!的值来判定开始的数字 所以 只要使用递归 每次确定一个数 当剩2个时 只剩两种情况 其中 k的递归关系为 k=k - devide * jiech(n-1) 代码如下:
public class Solution {
public static String getPermutation(int n, int k) {
String res="";
Map<Integer,Integer> hm=new HashMap<Integer, Integer>();
res=getpermutation(res,hm,n,k,n);
return res;
}
public static String getpermutation(String s,Map<Integer,Integer> hm,int n,int k,int t){
if(n==1)return "1";
if(n==2){
if(k==1){
for (int i = 1; i <= t; i++) {
if (!hm.containsKey(i)) {
s += i;
}
}
}
if(k==2){
for (int i = t; i >= 1; i--) {
if (!hm.containsKey(i)) {
s += i;
}
}
}
return s;
}else {
int jiech = 1;
for (int i = 1; i <= n - 1; i++) {
jiech = jiech * i;
}
int devide = (k-1) / jiech;
int addint = 0;
int count = 0;
for (int i = 1; i <= t; i++) {
if (!hm.containsKey(i)) {
count++;
if (count == devide + 1) {
addint = i;
break;
}
}
}
hm.put(addint, 1);
return getpermutation(s + addint, hm, n - 1, k - devide * jiech,t);
}
}
}