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.
思路:采用回溯法遍历字符串会超时,所以必须采用数学方法,先求n!,从高到低求得每一位的字符
class Solution {
public:
string getPermutation(int n, int k) {
int sum = 1;
string s;
vector<int> record(n, 0);
for (int i = 0; i < n; i++){
record[i] = i + 1;
sum *= (i + 1);
}
while (k){
sum= sum / n; //当前最高位的基本组成单元
n--;
s = s + char(record[(k-1) / sum]+'0'); //k有多少个组成单元构成,当k/sum==0时,表示首位是1;
record.erase(record.begin()+(k-1) / sum);
k = k-sum*(k / sum); //k往后搜索
}
for (int i = record.size() - 1; i >= 0; i--){
s = s + char(record[i] + '0');
}
return s;
}
};