package com.interview.misc;
import java.util.ArrayList;
import java.util.List;
/**
* https://leetcode.com/problems/permutation-sequence/
*/
public class GetKthPermutation {
public String getPermutation(int n, int k) {
List<Integer> unused = new ArrayList<>();
for (int i = 1; i <= n; i++) {
unused.add(i);
}
StringBuffer result = new StringBuffer();
int fac = factorial(n);
int d = n;
while (n > 1) {
fac = fac/d;
d--;
int index = (int)Math.ceil((double)k/fac);
result.append(unused.get(index - 1));
unused.remove(index - 1);
n--;
k = k - fac*(index - 1);
}
if (n == 0) {
for (int i = unused.size() - 1; i >= 0; i--) {
result.append(unused.get(i));
}
}
if (n == 1) {
for (int i = 0; i < unused.size(); i++) {
result.append(unused.get(i));
}
}
return result.toString();
}
private int factorial(int n) {
int result = 1;
for (int i = 1; i <= n; i++) {
result *= i;
}
return result;
}
public static void main(String args[]) {
GetKthPermutation gp = new GetKthPermutation();
System.out.println(gp.getPermutation(6, 343));
}
}