高级算法:
题目描述:
集合[1,2,3,…,n]一共有n!种不同的排列
按字典序列出所有的排列并且给这些排列标上序号
我们就会得到以下的序列(以n=3为例)
“123”
“132”
“213”
“231”
“312”
“321”
现在给出n和k,请返回第k个排列
注意:n在1到9之间
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 k th permutation sequence.
Note: Given n will be between 1 and 9 inclusive.
输入描述:
输出描述:
示例1:
输入:
输出:
代码:
import java.util.ArrayList;
public class Solution {
public String getPermutation(int n, int k) {
String res="";
ArrayList<Integer> list =new ArrayList<>();
for(int i=0;i<n;i++)
list.add(i+1);
int[] f = new int[n];
f[0]=1;
k--;
for(int i=1;i<n;i++) f[i]=f[i-1]*i;
for(int i=n;i>=1;i--){
int j=k/f[i-1];
k%=f[i-1];
res+=list.get(j);
list.remove(j);
}
// System.out.println(String.valueOf(res));
return res;
}
}