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.
Backtracking MathCode:
import java.util.ArrayList;
import java.util.Arrays;
/**
* @author MohnSnow
* @time 2015年6月27日 下午10:10:08
* @translate 全排列变形版
*
*/
public class LeetCode60 {
// 264msAC
// https://leetcode.com/discuss/33993/short-java-solution-with-detailed-comments
public static String getPermutation(int n, int k) {
ArrayList<String> candidates = new ArrayList<String>();
int size = 1;
for (int i = 0; i < n; i++) {
candidates.add(Integer.toString(i + 1));
size *= i + 1;
}
StringBuilder sb = new StringBuilder();
k--;
for (int j = n; j > 1; j--) {
size = size / j;
int select = k / size;
k = k % size;
String str = candidates.get(select);
sb.append(str);
candidates.remove(select);
}
sb.append(candidates.get(0));
return sb.toString();
}
public static void getPermutation1(int begin, int end, int[] temp) {
if (begin == end - 1) {
for (int i = 0; i < temp.length; i++) {
System.out.print(temp[i]);
}
System.out.println(" ");
} else {
for (int i = begin; i < end; i++) {
int tempInt = temp[i];
temp[i] = temp[begin];
temp[begin] = tempInt;
getPermutation1(begin + 1, end, temp);
tempInt = temp[i];
temp[i] = temp[begin];
temp[begin] = tempInt;
}
}
}
public static void main(String[] args) {
int n = 3;
int k = 6;
int[] temp = { 1, 2, 3, 4 };
System.out.println("spiralOrder: " + getPermutation(n, k));
getPermutation1(0, 4, temp);
}
}