<p>The set <code>[1, 2, 3, ...,&nbsp;n]</code> contains a total of <code>n!</code> unique permutations.</p>

<p>By listing and labeling all of the permutations in order, we get the following sequence for <code>n = 3</code>:</p>

<ol>
	<li><code>&quot;123&quot;</code></li>
	<li><code>&quot;132&quot;</code></li>
	<li><code>&quot;213&quot;</code></li>
	<li><code>&quot;231&quot;</code></li>
	<li><code>&quot;312&quot;</code></li>
	<li><code>&quot;321&quot;</code></li>
</ol>

<p>Given <code>n</code> and <code>k</code>, return the <code>k<sup>th</sup></code> permutation sequence.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>
<pre><strong>Input:</strong> n = 3, k = 3
<strong>Output:</strong> "213"
</pre><p><strong class="example">Example 2:</strong></p>
<pre><strong>Input:</strong> n = 4, k = 9
<strong>Output:</strong> "2314"
</pre><p><strong class="example">Example 3:</strong></p>
<pre><strong>Input:</strong> n = 3, k = 1
<strong>Output:</strong> "123"
</pre>
<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= n &lt;= 9</code></li>
	<li><code>1 &lt;= k &lt;= n!</code></li>
</ul>

import math
class Solution:
    def __init__(self):
        self.__k : int
        self.__i : int = 0
        self.__result : list = []

    def __iteratePermutations(self, permutation : str, remaining : list):
        if len(remaining) == 0:
            self.__result.append(permutation)
            self.__i += 1
        else:
            for index in range(len(remaining)):
                tmpRemaining : list = remaining.copy()
                tmpRemaining.pop(index)

                self.__iteratePermutations(permutation + str(remaining[index]), tmpRemaining)
        if self.__i == self.__k:
            raise Exception("finished")

    def getPermutation(self, n: int, k: int) -> str:
        numbers : list = None
        if k < math.factorial(n) / 2:
            numbers = [i for i in range(1, n + 1)]
        else:
             numbers = [i for i in range(n, 0, -1)]
             k = math.factorial(n) - k + 1
        self.__k = k
        try:
            self.__iteratePermutations("", numbers)
        except Exception as e:
            if str(e) == "finished":
                return self.__result[self.__i - 1]

        
29800