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 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.
Given k will be between 1 and n! inclusive.
- Example 1:
Input: n = 3, k = 3
Output: “213” - Example 2:
Input: n = 4, k = 9
Output: “2314”
解法
这道题就是找规律,具体怎么找可以自己画一组数跟着代码过一遍流程就懂了,语言能力不行表述不清,就不误导大家了,还是自己想更能想明白
public String getPermutation(int n, int k) {
List<Integer> list=new ArrayList<Integer>();
for(int i=1;i<=n;i++)
list.add(i);
int an=(k-1)/f(n-1);
int kn=(k-1)%f(n-1);
String res=String.valueOf(list.get(an));
list.remove(an);
for(int i=2;i<=n;i++)
{
an=kn/f(n-i);
kn=(k-1)%f(n-i);
res=res+String.valueOf(list.get(an));
list.remove(an);
}
return res;
}
private int f(int i) {
// TODO Auto-generated method stub
int res=1;
for(int j=2;j<=i;j++)
res*=j;
return res;
}
}
Runtime: 7 ms, faster than 80.89% of Java online submissions for Permutation Sequence.
Memory Usage: 37.6 MB, less than 33.33% of Java online submissions for Permutation Sequence.