string getPermutation(int n, int k)
类似康拓展开的思路。
string getPermutation(int n, int k) {
assert(k > 0);
string s;
for(int i = 1; i <= n; ++i)
s.push_back('0' + i);
string output;
int f = fac(n);
k--;
for (int i = 0; i < n; ++i) {
f = f / (n - i);
int m = k / f;
output.push_back(s[m]);
s.erase(m, 1);
k = k % f;
}
return output;
}
int fac(int n)
{
int v = 1;
for (int i = 2; i <= n; ++i)
v *= i;
return v;
}

本文介绍了一种高效算法,用于找出从1到n的所有数字排列中第k个排列的字符串形式。通过递减k值并利用阶乘计算,该算法避免了全排列的暴力生成,实现了O(n)的时间复杂度。
375

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



