Leetcode60 Permutation Sequence (string)

来源:互联网 发布:2017程序员笔记本推荐 编辑:程序博客网 时间:2024/06/06 00:13

题意:给一个n,一个k,求1到n的所有数字的全排列按从小到大顺序排列的第k大的数

分析:可以参考康托编码2333,不过自己想也想得明白,比如说n=5的话,求第一个数字时每个数都有4!组子数,也就是/4!也就得到了开头的那个数字,然后数字是不能重复的,依次类推就能求出所有的数,注意整除时那里得处理下,也就是一些细节问题就行

AC:

class Solution {public:    string getPermutation(int n, int k) {        string s(n,'0');        string ans;        int f=1;        int index;        for(int i=1;i<=n;i++)        {            s[i-1]=i;            f*=i;        }//s:1,2,3,4,5        while(n)        {            f/=n;//不断求(n-1)!            index=k/f;            if(k%f==0)                index--;            ans+=s[index]+'0';            s.erase(s.begin()+index);            k-=index*f;            n--;        }        return ans;    }};