https://leetcode.com/problems/permutation-sequence/
康拓展开和逆康拓展开
自己推一推 参考http://www.cnblogs.com/hxsyl/archive/2012/04/11/2443009.html
class Solution {
public:
string getPermutation(int n, int k) {
k--;
for(int i=0;i<=n;i++){
vis[i]=0;
if(i == 0)jie[i]=1;
else jie[i] = (i)*jie[i-1];
}
string ret;
for(int i=n-1;i>0;i--) {
int div = k/jie[i];
int mod = k%jie[i];
ret = ret + getDiv(div+1,n);
//cout << "div=" << div << " " << " mod=" << mod << endl;
k = mod;
}
for(int i=1;i<=n;i++)
if(!vis[i])
ret = ret + (char)(i+'0');
return ret;
}
char getDiv(int d, int n) {
int cnt=0;
for(int i=1;i<=n;i++) {
if(!vis[i]) {
cnt++;
if( cnt == d ) {
vis[i] = 1;
return (char)(i+'0');
}
}
}
return '0';
}
private:
int vis[10], jie[10];
};