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

【LeetCode】Permutation Sequence

时间:2014-12-10 21:11:32      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   sp   for   strong   

Permutation Sequence

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=3进行说明:

构建数组v={1,2,3}

确定最高位:

ind=(k-1)/2

注:分母2是指每个最高位持续的排列数。由于除了最高位之外还有n-1=2位,一共可以出现2!种排列。

ind指的是所求的第k个排列会落在哪一个最高位的覆盖范围内。

k==1,2时,ind==0,最高位为v[ind]==1

k==3,4时,ind==1,最高位为v[ind]==2

k==5,6时,ind==2,最高位为v[ind]==3

其余数位如上思路逐位确定。注意k的取余更新。

class Solution {
public:
    string getPermutation(int n, int k) {
        vector<int> v(n, 0);
        for(int i = 0; i < n; i ++)
            v[i] = i+1;
        string result = "";
        while(n-1)
        {
            int divisor = fac(n-1);
            int ind = (k-1)/divisor;
            //itoa
            string digit;
            char temp[32];
            sprintf(temp, "%d", v[ind]);
            digit = temp;
        
            result += digit;
            for(int i = ind+1; i < v.size(); i ++)
                v[i-1] = v[i];
            v.pop_back();
            k %= divisor;
            if(k == 0)
                k = divisor;
            n --;
        }
        //itoa
        string digit;
        char temp[32];
        sprintf(temp, "%d", v[0]);
        digit = temp;
        
        result += digit;
        return result;
    }
    int fac(int n)
    {
        if(n == 0)
            return 1;
        int result = 1;
        for(int i = 1; i <= n; i ++)
            result *= i;
        return result;
    }
};

bubuko.com,布布扣

 

【LeetCode】Permutation Sequence

标签:style   blog   http   io   ar   color   sp   for   strong   

原文地址:http://www.cnblogs.com/ganganloveu/p/4156188.html

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