我们不是从低位到高位确定排列,而是反过来,从高位到低位:
最高位有n种填法,余下的是n-1!种填法。
n=3,k=3,n-1! = 2, 所以第一位是2,剩下两位是2,1,3,
n=4,k=9,n-1!=6, 所以第一位是2,
class Solution {
public:
string getPermutation(int n, int k) {
string res;
vector<bool> isUsed(n,false);
for(int i=0;i<n;i++){
int fact = 1;
for(int j=1;j<=n-i-1;j++) fact*=j;
for(int j=1;j<=n;j++){
if(isUsed[j]) continue;
if(k>fact) k-=fact;
else{
res+=to_string(j);
isUsed[j] = true;
break;
}
}
}
return res;
}
};