天天看點

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.

參考:http://www.cnblogs.com/tenosdoit/p/3721918.html

#include<iostream>
#include<string>
#include<vector>
using namespace std;

class Solution {
public:
    string getPermutation(int n, int k) {
        if(n==0)
            return "";
        int total=factorial(n);
        string str=string("123456789").substr(0,n);
        string ret(n,' ');
        int i;
        for(i=0;i<n;i++)
        {
            int index;
            total=total/(n-i);
            index=(k-1)/total;
            ret[i]=str[index];
            str.erase(index,1);
            k=k-index*total;
        }
        return ret;
    }

    int factorial(int n)
    {
        if(n==0)
            return 0;
        int i;
        int sum=1;
        for(i=1;i<=n;i++)
           sum*=i;
        return sum;
    }
};

int main()
{
    Solution s;
    cout<<s.getPermutation(3,5)<<endl;
}