码迷,mamicode.com
首页 > 其他好文 > 详细

Permutation Sequence

时间:2014-06-29 06:03:23      阅读:260      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   get   使用   strong   

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.

思路:这道题的意思是顺序找出1~n的第k个排列组合,并返回。考虑一下,给你n-1个数组成排列,最多有(n-1)!种情况,当第n个数(这个数可以是1~n中的一个数),每增加1,排列情况就会增加(n-1)!种。所以,k/(n-1)!可以得到最高位(从左往右)应该出现的数字,在计算后面的位数,进入下一循环的条件k=k%(n-1)!;如果是第i位的时候,应该在剩下的数字中找出第k/(i-1)!个。为了表示已经访问过的数字,我们使用visited来记录。data记录0~n位的阶乘结果。

class Solution {
public:
    string getPermutation(int n, int k) {
        int data[10];
        vector<bool> visited(10,0);
        data[0]=1;
        for(int i=1;i<=n;i++)
        {
            data[i]=data[i-1]*i;
        }
        string str(n,0);
        --k;            //从0位开始算起
        for(int i=n-1;i>=0;i--)
        {
            int temp_k=k/data[i];
            int j=1;
            for(;j<10;j++)
            {
                if(visited[j]==0)
                    temp_k--;
                if(temp_k<0)
                    break;
            }
            visited[j]=1;
            str[n-i-1]=0+j;
            k=k%data[i];
        }
        return str;
    }
};

 

Permutation Sequence,布布扣,bubuko.com

Permutation Sequence

标签:style   blog   color   get   使用   strong   

原文地址:http://www.cnblogs.com/awy-blog/p/3793912.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!