Permutation Sequence
= =第一反应,把所有的都列出来,最多9!个嘛,感觉也不是很多,但是感觉总有点奇怪,还是作罢好了。
观察一下,比如:
- "123"
- "132"
- "213"
- "231"
- "312"
- "321"
如果只看第一位,比如2,会连续出现,并且只连续出现,有点意思。
如果按照第一位进行分组,则1,2是一组,3,4是一组,5,6是一组,共计6项三组。而6=123,如果拿1/2 = 0,得到0,0代表第一组。但是当6/2=3,此时没有第四组,所以应当做一个转化(1-1)/2 = 0,(6-1)/2 = 2,此时0,1,2分别代表1,2,3组。
而得到的余数可以作为下一轮的k。OK,no bi bi,show me the code。
class Solution
{
public:
string getPermutation(int n, int k)
{
string result = "";
string buffer(n,'0');
for (int i = 0; i < n; ++i)
{
buffer[i] = (i + '1');
}
int quotient = 1;
int divisor = 1;
for (int i = 2; i < n; ++i)
{
divisor *= i;
}
for (int i = 0; i < n - 1; ++i)
{
quotient = (k - 1) / divisor;
k = (k - 1) % divisor + 1;
result += buffer[quotient];
buffer.erase(buffer.begin()+quotient);
divisor /= (n - i - 1);
}
result += buffer;
return result;
}
};
网友评论