思路:直接计算,而非模拟全排列的过程
string getPermutation(int n, int k) {
vector<int> flag(n,0);
string s;
int x=0,temp=1;
for(int i=1;i<n;i++)
temp*=i;
for(int x=n-1;x>=0;x--)
{
int j=(k-1)/temp;
k=(k-1)%temp+1;//此处取余要特别注意
if(x!=0)temp/=x;//到0不再继续
int i=0,a=0;
while(a<=j)
{
if(flag[i++]==0) a++;
}
s+='0'+i;
flag[i-1]=1;//标志不能忘
}
return s;
}