Permutation Sequence
= =第一反應(yīng)长豁,把所有的都列出來,最多9忙灼!個(gè)嘛匠襟,感覺也不是很多,但是感覺總有點(diǎn)奇怪该园,還是作罷好了酸舍。
觀察一下,比如:
- "123"
- "132"
- "213"
- "231"
- "312"
- "321"
如果只看第一位里初,比如2啃勉,會連續(xù)出現(xiàn),并且只連續(xù)出現(xiàn)双妨,有點(diǎn)意思淮阐。
如果按照第一位進(jìn)行分組,則1,2是一組刁品,3,4是一組泣特,5,6是一組,共計(jì)6項(xiàng)三組哑诊。而6=123群扶,如果拿1/2 = 0,得到0镀裤,0代表第一組竞阐。但是當(dāng)6/2=3,此時(shí)沒有第四組暑劝,所以應(yīng)當(dāng)做一個(gè)轉(zhuǎn)化(1-1)/2 = 0骆莹,(6-1)/2 = 2,此時(shí)0,1,2分別代表1,2,3組担猛。
而得到的余數(shù)可以作為下一輪的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;
}
};