package leetcode;

/**
 * https://leetcode.com/problems/permutation-sequence/
 */
public class Problem60 {
    public String getPermutation(int n, int k) {
        getPermutation(n, "");
        return "";
    }
    
    public void getPermutation(int n, String accu) {
        if (n == 0) {
            System.out.println(accu);
            return;
        }
        for (int i = 1; i <= n; i++) {
            getPermutation(n-1, accu + i);
        }
    }
    
    public static void main(String[] args) {
        Problem60 prob = new Problem60();
        System.out.println(prob.getPermutation(3, 6));
    }
}

@@ -12,16 +12,65 @@
 tcode;%0A%0A
+import java.util.HashSet;%0Aimport java.util.Set;%0A%0A
 /**%0A * h
@@ -198,32 +198,39 @@
 nt k) %7B%0A        
+return 
 getPermutation(n
@@ -235,30 +235,108 @@
 (n, 
-%22%22);%0A        return %22%22
+k, n, new IntRef(), new HashSet%3C%3E(), %22%22);%0A    %7D%0A    %0A    private static class IntRef %7B%0A        int k
 ;%0A  
@@ -353,18 +353,21 @@
    p
-ublic void
+rivate String
  get
@@ -384,16 +384,63 @@
 n(int n,
+ int k, int m, IntRef intRef, Set%3CInteger%3E set,
  String 
@@ -459,17 +459,17 @@
     if (
-n
+m
  == 0) %7B
@@ -485,34 +485,96 @@
     
-System.out.println(
+intRef.k++;%0A            if (intRef.k == k) %7B%0A                return 
 accu
-)
 ;%0A
+            %7D%0A
     
@@ -587,16 +587,21 @@
   return
+ null
 ;%0A      
@@ -659,48 +659,339 @@
     
-getPermutation(n-1, accu + i);%0A        %7D
+if (!set.contains(i)) %7B%0A                Set%3CInteger%3E newSet = new HashSet%3C%3E(set);%0A                newSet.add(i);%0A                String result = getPermutation(n, k, m-1, intRef, newSet, accu+i);%0A                if (result != null) %7B%0A                    return result;%0A                %7D%0A            %7D%0A        %7D%0A        return null;
 %0A   
@@ -1136,12 +1136,17 @@
 ion(
-3, 6
+9, 171669
 ));%0A

Solve problem 60 (time limit exceeded)