leetCode_Permutation Sequence

来源:互联网 发布:西安科技大学考研 知乎 编辑:程序博客网 时间:2024/05/18 00:13

题意:在集合[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;}


0 0
原创粉丝点击