算法题目: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.
题意:给定1……n数字集合,有n!种排列,排列按小到大排,找到第k个排列字符串,n>=1&&n<=9
思路:先初始化字符串“1……n”,然后从0位开始逐步确定每一位的数字,第i位后面的数字有(n-1-i)!种排法,若假设k<(n-1-i)!,则可确定第i位的数字。
string getPermutation(int n, int k) {
int KN=1;
string ret(n,'1');
for(int i=2;i<=n;i++)
{
KN*=i;
ret[i-1]=i+'0';
}
int temp=n;
for(int i=0;i<ret.size();i++)
{
KN/=temp;
for(int j=i+1;j<n&&k>KN;j++)
{
swap(ret[i],ret[j]);
k-=KN;
if(k==1)break;
}
temp--;
}
return ret;
}