Permutation Sequence
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.
tag里说可以用回溯。我直接用了递归。o(n)的复杂度。
每次层递归时通过一个除法确定第一个字符,通过一个取余确定接下来字符串确定的index。
class Solution {
public:
string getPermutation(int n, int k) {
vector<char> elements;
for(int i = 1; i <= n; i++){
elements.push_back(i + '0');
}
return _getPermutations(elements, k - 1);
}
string _getPermutations(vector<char> elements, int k){
int size = elements.size();
if(size == 1){//base condition
return string(1, elements[0]);
}
int factorial = 1;
for(int i = 1; i < size; i++){
factorial *= i;
}
int reminder = k % factorial;
int q = k / factorial;
char c = elements[q];
elements.erase(elements.begin() + q);
string re = _getPermutations(elements, reminder);
re.insert(re.begin(), c);
return re;
}
};
