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

class Solution {
public:
    string solve(string &s, int n) {
        int i = n - 2;
        // Find the first element from the end that is smaller than its next element
        while (i >= 0 && s[i] >= s[i + 1])
            i--;
        
        // If no valid i was found, it means the string is in descending order, no more permutations possible
        if (i < 0)
            return s;

        int j = n - 1;
        // Find the smallest element that is larger than s[i]
        while (j >= 0 && s[j] <= s[i])
            j--;
        
        // Swap the two
        swap(s[i], s[j]);

        // Reverse the sequence after position i to get the next lexicographical permutation
        reverse(s.begin() + i + 1, s.end());

        return s;
    }

    string getPermutation(int n, int k) {
        string res = "";
        // Create the initial string "123...n"
        for (int i = 1; i <= n; i++) {
            res += to_string(i);
        }

        // The first permutation is already res, so we need k-1 more iterations
        for (int i = 1; i < k; i++) {
            res = solve(res, n);
        }

        return res;
    }
};

9500