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):
-
"123"
-
"132"
-
"213"
-
"231"
-
"312"
-
"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;
}