/*这道题的最直观想法是采用计数的方法,先确定第一个数字,同样不断
地确定后面的数字即可。思路如下:
1.排除第一个数后,其他n-1个数共有(n-1)!个排列;
2.因此,所求排列的第一个数下标为(k-1)/((n-1)!);
//下标从0开始,而k从1开始,所以为(k-1)
3.删除确定的第一个元素,接下来求第(k-1)%((n-1)!)个排列。
4.重复1~3,直到n个元素都已经确定。
参考自:http://www.cnblogs.com/TenosDoIt/p/3721918.html
*/
class Solution {
public:
string getPermutation(int n, int k) {
string str("123456789");
string s(str.substr(0, n));
string res(n, ' ');
for(int i = 0; i < n; ++i){
res[i] = getNextChar(s, k);
}
return res;
}
char getNextChar(string& s, int& k){
int fac = factorial(s.size() - 1);
int idx = (k-1) / fac;
char res = s[idx];
k -= idx*fac;
s.erase(idx, 1);
return res;
}
int factorial(int n){
int res(1);
for(int i = 2; i <= n; ++i){
res *= i;
}
return res;
}
};
LeetCode之Permutation Sequence
最新推荐文章于 2021-12-12 01:34:22 发布