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.
Difficulty: Medium
这题两个解法,第一个用nextPermutation,暴力算法,结果超时了。
第二个,通过一个巧妙地算法,比如第一位数的每个数的可能性为(n-1)!,通过一个sign[9]来记录每个数有没有用过,再通过(k-1)/(n-1)!来确定每一位是哪个数
解法一没通过就不上了
解法二:
int jc(int a)
{
if(a==0)
return 1;
int ans = 1;
for(int i = 1;i<=a;i++)
ans = ans * i;
return ans;
}
string getPermutation(int n, int k) {
string s;
int sign[9] = {0};
int index, n1 = n;
for(int i = 0;i<n1;i++)
{
index = (k-1)/jc(n-1);
int j = 0;
for(j = 0;j<n1;j++)
{
if(sign[j]==0)
index--;
if(index<0)
break;
}
sign[j]++;
s.push_back(j+'0'+1);
k = k%jc(n-1);
if(k ==0)
k = jc(n-1);
n--;
}
return s;
}