您的位置:首页 > 产品设计 > UI/UE

leetCode_Permutation Sequence

2016-08-18 09:19 375 查看
题意:在集合[1,2,...,n]中找出第k个组合序列

思路:相当于把每个组合序列编号,从最高位开始,看看每一位能填几。

代码如下:

string getPermutation(int n, int k)
{
vector<int> f;
bool isUsed[10];
int i,j,t,m;
string ans;
f.push_back(1);
j=1;
for(i=1; i<=8; i++)
{
j=j*i;
f.push_back(j);
}
for(i=1; i<=n; i++) isUsed[i]=false;
for(i=1; i<=n; i++)
{

for(j=n-1; i>=0; j--)
{
if(k>j*f[(n-i)])//要注意是j*f[(n-i)]不是f[j]*(n-i)
{
k-=j*f[(n-i)];
j++;
break;
}
}
m=0;
for(t=1; t<=n; t++)
{
if(isUsed[t]==false) m++;
if(m==j)
{
isUsed[t]=true;
break;
}
}
switch(t)
{
case 1:
ans+="1";
break;
case 2:
ans+="2";
break;
case 3:
ans+="3";
break;
case 4:
ans+="4";
break;
case 5:
ans+="5";
break;
case 6:
ans+="6";
break;
case 7:
ans+="7";
break;
case 8:
ans+="8";
break;
case 9:
ans+="9";
break;
default:
break;
}

}
return ans;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: