Permutation Sequence算法详解

来源:互联网 发布:淘宝一元购 编辑:程序博客网 时间:2024/05/14 11:21

算法题目:The set [1,2,3,…,n] contains a total of n! unique permutations.

By listing and labeling all of the permutations in order,
We get the following sequence (ie, for n = 3):

“123”
“132”
“213”
“231”
“312”
“321”
Given n and k, return the kth permutation sequence.

Note: Given n will be between 1 and 9 inclusive.

题意:给定1……n数字集合,有n!种排列,排列按小到大排,找到第k个排列字符串,n>=1&&n<=9

思路:先初始化字符串“1……n”,然后从0位开始逐步确定每一位的数字,第i位后面的数字有(n-1-i)!种排法,若假设k<(n-1-i)!,则可确定第i位的数字。

    string getPermutation(int n, int k) {        int KN=1;        string ret(n,'1');        for(int i=2;i<=n;i++)        {            KN*=i;            ret[i-1]=i+'0';        }        int temp=n;        for(int i=0;i<ret.size();i++)        {            KN/=temp;            for(int j=i+1;j<n&&k>KN;j++)            {                swap(ret[i],ret[j]);                k-=KN;                if(k==1)break;            }            temp--;        }        return ret;    }
0 0