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.
该题数据结构如图:
思路:由这个数据结构,找规律,根据k来推算每个位置应该放置的数据。例如:
Solution: run time 400ms
</pre><p><pre name="code" class="java">public class Solution {
public String getPermutation(int n, int k) {
String result = new String();
if (n == 0 || factorial(n) < k) {
return result;
}
ArrayList<String> array = new ArrayList<String>();
for (int i = 0; i < n; i++) {
array.add(Integer.toString(i+1));
}
int size = array.size();
for (int j = 0; j < size; j++) {
n--;
if (n == 0) {
result += array.get(0);
} else {
int fac = factorial(n);
int pos = k / fac;
if (k % fac == 0) pos--;
pos = pos % array.size();
result += array.get(pos);
array.remove(pos);
}
}
return result;
}
public static int factorial(int n) {
if (n == 0) return 0;
int fact = 1;
for (int i = 1; i <= n; i++) {
fact *= i;
}
return fact;
}
}