【Leetcode】Permutation Sequence

来源:互联网 发布:便宜有好看的淘宝店铺 编辑:程序博客网 时间:2024/05/21 17:11

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):

  1. "123"
  2. "132"
  3. "213"
  4. "231"
  5. "312"
  6. "321"

Given n and k, return the kth permutation sequence.

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

题意:在给定数字n的全排列中找到第k个字符串,并返回。

关键点:1)设num=(k-1)/factorial,factorial是1至n-1的乘积。可以知道第一个数就是从1到n中第num+1大的数,然后将reminder=(k-1)%factorial作为下一轮的k,这时求num不再需要让k-1。

2)按照上述方式不断的求下一轮的数字,将其添加到返回字符串s的结尾处,并将已经添加的数字置为0,这个时候寻找第num+1大的数时要记得忽略掉之前已经添加的数。

3)如此循环往复,直到n=0.

class Solution {public:    string getPermutation(int n, int k) {        if(n==1)            return "1";        string s="";        int *a=new int[n];        for(int i=0;i<n;i++)        {            a[i]=i+1;        }        int factorial=1;        for(int i=1;i<=n-1;i++)            factorial*=i;        int num,reminder;                    while(true)        {            num=(k-1)/factorial;            reminder=(k-1)%factorial;            int j=0;            while(num--)            {                while(a[j]==0)                    j++;                j++;            }            while(a[j]==0)                j++;            char temp='0'+a[j];            a[j]=0;            s+=temp;            n--;            if(n==0)                return s;            k=reminder+1;            factorial/=n;        }    }    };


0 0
原创粉丝点击