1. 思路
康拓展开,具体思路如下:
对于1,2,3,4的所有排列,假如找第15个:
我们知道确定第一个元素,其余三个的所有组合数为6种,所以以1,2开头的所有组合数为12种,1,2,3开头的组合数为18种。可以推断第一个数为3,那么通过递归分析可以将原问题转化为1,2,4的所有排列中找第3个(15-3)。
2. 代码
class Solution {
public:
string getPermutation(int n, int k) {
vector<char> chs={'1','2','3','4','5','6','7','8','9'};
const int factor[]={1,1,2,6,24,120,720,5040,40320,362880};
string ret;
for(--k;n;k%=factor[n])
{
int index = k/factor[--n];
ret.push_back(chs[index]);
chs.erase(chs.begin() + index);
}
return ret;
}
};