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.
思路,使用字典序法,与http://blog.csdn.net/mlweixiao/article/details/38897499
public class Solution {
private void nextPermutation(int[] num) {
int i;
int cur = -1;
int temp;
// find the last increase sequence
for (i = num.length - 1; i >= 1; i--) {
if (num[i] > num[i - 1]) {
cur = i - 1;
break;
}
}
// if the increase sequence exists,
// swap the cur and the last one(bigger than it)
if (cur != -1) {
for (i = num.length - 1; i > cur; i--) {
if (num[i] > num[cur]) {
temp = num[cur];
num[cur] = num[i];
num[i] = temp;
break;
}
}
}
for (i = cur + 1; 2 * i <= cur + num.length - 1; i++) {
temp = num[i];
num[i] = num[num.length - i + cur];
num[num.length - i + cur] = temp;
}
}
public String getPermutation(int n, int k) {
int [] temp=new int[n];
StringBuffer s=new StringBuffer("");
for(int i=0;i<n;i++){
temp[i]=i+1;
}
for(int i=1;i<k;i++){
nextPermutation(temp);
}
for(int i=0;i<n;i++){
s.append(temp[i]);
}
return s.toString();
}
}