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

C++实现代码:

#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;
}
原文地址:https://www.cnblogs.com/wuchanming/p/4126149.html