# LeetCode – Permutation Sequence (Java)

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.)

Java Solution 1

```public class Solution { public String getPermutation(int n, int k) {   // initialize all numbers ArrayList<Integer> numberList = new ArrayList<Integer>(); for (int i = 1; i <= n; i++) { numberList.add(i); }   // change k to be index k--;   // set factorial of n int mod = 1; for (int i = 1; i <= n; i++) { mod = mod * i; }   String result = "";   // find sequence for (int i = 0; i < n; i++) { mod = mod / (n - i); // find the right number(curIndex) of int curIndex = k / mod; // update k k = k % mod;   // get number according to curIndex result += numberList.get(curIndex); // remove from list numberList.remove(curIndex); }   return result.toString(); } }```

Java Solution 2

```public class Solution { public String getPermutation(int n, int k) { boolean[] output = new boolean[n]; StringBuilder buf = new StringBuilder("");   int[] res = new int[n]; res[0] = 1;   for (int i = 1; i < n; i++) res[i] = res[i - 1] * i;   for (int i = n - 1; i >= 0; i--) { int s = 1;   while (k > res[i]) { s++; k = k - res[i]; }   for (int j = 0; j < n; j++) { if (j + 1 <= s && output[j]) { s++; } }   output[s - 1] = true; buf.append(Integer.toString(s)); }   return buf.toString(); } }```
Category >> Algorithms
If you want someone to read your code, please put the code inside <pre><code> and </code></pre> tags. For example:
```<pre><code>
String foo = "bar";
</code></pre>
```
• Leo Rossignac-Milon

Sorry the post below is mine. This website, please step up your markdown game.

Here is an image of the working, short code:

http://tinypic.com/view.php?pic=1zvvkeu&s=8#.VCSh6CtdVFo

• Guest

public static String kPerm (int n, int k){

ArrayList digits = new ArrayList();

for (int i=1; i<=n; i++) digits.add(i);

StringBuilder result = new StringBuilder();

for (int i=0; i=fac){

digitIndex++;

k-=fac;

}

result.append(digits.remove(digitIndex));

}

return result.toString();

}

• Guest

public static String kPerm (int n, int k){
ArrayList digits = new ArrayList();
for (int i=1; i<=n; i++) digits.add(i);
StringBuilder result = new StringBuilder();

for (int i=0; i=fac){
digitIndex++;
k-=fac;
}

result.append(digits.remove(digitIndex));
}

return result.toString();
}

• Guest

public static String kPerm (int n, int k){

ArrayList digits = new ArrayList();
for (int i=1; i<=n; i++) digits.add(i); //digits = 1,2,3,…,n
StringBuilder result = new StringBuilder();

for (int i=0; i=fac){
digitIndex++; //this digit must be the next largest available digit
k-=fac;
} //end while loop

result.append(digits.remove(digitIndex));
} //end for loop

return result.toString();
}

• Leo Rossignac-Milon

I have a much simpler solution 🙂
kth permutation starts at 0

public static String kPerm (int n, int k){
….ArrayList digits = new ArrayList();
….for (int i=1; i<=n; i++) digits.add(i); //0,1,2,3,4….n
….StringBuilder result = new StringBuilder();

….for (int i=0; i=fac){ //we must shift to the next digit to the next largest available digit
…………….digitIndex++;
…………….k-=fac;
……..}
……..result.append(digits.remove(digitIndex));
….}
….return result.toString();
}

• gk

The second solution is extremely hard to read. I saw a exact same one somewhere else.