此题参考 http://www.cnblogs.com/tenosdoit/p/3721918.html
代码
class Solution {
public:
string getPermutation(int n, int k) {
string str = string("123456789").substr(0,n);
string res(n,' ');
for(int i = 0; i < n; ++i)
res[i] = getPermutationHelper(str, k);
return res;
}
char getPermutationHelper(string &str, int &k)
{
int temp = factorial(str.size()-1);
int i = (k-1)/temp;
char res = str[i];
str.erase(i,1);
k = k - i*temp;
return res;
}
int factorial(int n)
{
int res = 1;
for(int i = 2; i <= n; ++i)
res *= i;
return res;
}
};
本文提供了一个使用C++编程语言实现的算法,用于根据给定的n和k值获取长度为n的字符串的所有可能排列中的第k个排列。通过递归调用和阶乘计算,该算法高效地生成了所需排列。
220

被折叠的 条评论
为什么被折叠?



