60. 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):
"123"
"132"
"213"
"231"
"312"
"321"
Given n and k, return the kth permutation sequence.
转载于 点击打开链接举例:当n=4,k=14
确定第一个字符,14/(3!)=2,对应1, 2, 3 ,4中的3。排除以1,2为首的所有序列。14-12=2
3...(1, 2, 4)==>3, 1,...(2, 4)==>3, 1, 4,...(2)
最后的结果:3,1,4,2
class Solution {
public:
string tostr(int i)
{
string s;
while(i)
{
char c='0'+i%10;
i/=10;
s+=c;
}
return s;
}
string getPermutation(int n, int k) {
string s;
vector<int> num;
for(int i=1;i<=n;i++)
num.push_back(i);
int sum=1;
vector<int> fac(n+1,1);
for(int i=1;i<=n;i++)
{
sum*=i;
fac[i]=sum;
}
k--;
while(n>1)
{
int idx=k/fac[n-1];
k=k%fac[n-1];
s.append(tostr(num[idx]));
int t=num[idx];
remove(num.begin(),num.end(),t);
n--;
}
s.append(tostr(num[0]));
return s;
}
};