60. Permutation Sequence

来源:互联网 发布:bind 域名冲突 编辑:程序博客网 时间:2024/05/01 18:18
//开始还考虑当这个n特别大,导致n!>int_max,然而k<int_max怎么办,后来发现题设没考虑这些边界条件,那就无所谓啦,直接解出来class Solution {public:    void get_kth(string &s,int factorial,int k,bool * flag,int n)    {        if(n==s.size())  return;        int m=(k-1)/factorial+1;        k-=(m-1)*factorial;        for(int i=0;i<m;i++)        {            if(flag[i]) m++;        }        flag[m-1]=true;        s.push_back(m+'0');        if(n!=s.size()) factorial/=(n-s.size());        get_kth(s,factorial,k,flag,n);    }    string getPermutation(int n, int k) {        int factorial=1;        for(int i=1;i<n;i++) factorial*=i;//(n-1)!        string s;        bool * flag=new bool[n];        memset(flag,false,sizeof(bool)*n);        get_kth(s,factorial,k,flag,n);        return s;    }};
0 0