class Solution {
public:
void next(vector<int> &v, int n) {
if (n < 2) return;
int i = n - 2;
for (; i >= 0 && v[i] >= v[i + 1]; i--);
int j = n - 1;
for (; j >= 0 && v[i] >= v[j]; j--);
int tmp = v[i];
v[i] = v[j];
v[j] = tmp;
i++;
j = n - 1;
while (i < j) {
int tmp = v[i];
v[i] = v[j];
v[j] = tmp;
i++;
j--;
}
}
string getPermutation(int n, int k) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<int> v(n);
for (int i = 0; i < n; i++)
v[i] = i + 1;
for (int i = 1; i < k; i++)
next(v, n);
string ret = "";
for (int i = 0; i < n; i++)
ret += v[i] + '0';
return ret;
}
};
Small Case: 4ms
Large Case: 840ms
Time: O(k * n)
Space: O(n)