public class Solution {
public String getPermutation(int n, int k) {
int[] num = new int[n];
for(int i=1; i<=n; i++)
num[i-1]=i;
for(int i=0; i<k-1; i++){
nextPermutation(num);
}
StringBuilder sb = new StringBuilder();
for(int i=0; i<n; i++){
sb.append(num[i]);
}
return sb.toString();
}
public void nextPermutation(int[] num) {
int pivot = 0;
for (int i = num.length - 2; i >= 0; i--) {
if (num[i] < num[i + 1]) {
pivot = i;
break;
}
}
int j = num.length - 1;
while (j != pivot && num[j] <= num[pivot])
j--;
if (j <= 0) {
reverseStringArray(num, 0, num.length - 1);
} else {
int c = num[pivot];
num[pivot] = num[j];
num[j] = c;
reverseStringArray(num, pivot + 1, num.length - 1);
}
}
private static void reverseStringArray(int[] s, int start, int end) {
for (int i = start; i < (start + end+1) / 2; i++) {
int c = s[i];
s[i] = s[end - (i - start)];
s[end - (i - start)] = c;
}
}
}
思路还是上一个的。
还有一个是数学规律法(康拓编码):
待续~