算法
(暴力枚举) $O(n^2)$
这题要在纸上多模拟几遍才能吃透,并且最好自己再写一遍
时间复杂度
参考文献
C# 代码
static string getPermutation(int n, int k)
{
bool[] st = new bool[10];
StringBuilder res = new StringBuilder();
/*1-总共给四个位置填数*/
for (int i = 0; i < n; i++)
{
int fact = 1;
/*2-每次填一个位置,计算填这个数总共有多少种排列情况*/
for (int j = 1; j <= n - i - 1; j++) fact *= j;
/*
3-从前往后找没有用过的数,如果找到,先看一下填了这个数,总共的排列情况.
如果大于K,那么应该填这个数,填完更新K,继续缩小范围,再找下一个数;
如果小于K,那么不是这个数,需要更新K,然后break掉,回到第一个for循环,
尝试填入下一个数。
*/
for (int j = 1; j <= n; j++)
{
if (!st[j])
{
if (fact < k) k -= fact;
else
{
res.Append(j);
st[j] = true;
break;
}
}
}
}
return res.ToString();
}