找到n的全排列按大小排列的第k个序列....实际上n有n!个全排列,每个首位有(n-1)!种情况,因而根据其与k的大小关系可以确定首位....类似,我们可以利用余数和(n-1)!的大小关系确定第二位.....
这里我们需要维护一个数组来记录每个数的使用情况....每次从小到大选择第“商”个没选的数为该位...
另外,第k个数实际上是从0开始排的k-1个数,所以要先k--
public class Solution {
public String getPermutation(int n, int k) {
int []data = new int[10];
boolean []isUse = new boolean[10];
String res = "";
data[0]=1;
for(int i=1;i<=9;i++)
{
data[i] = i*data[i-1];
}
k--;
for(int j=n;j>=1;j--)
{
int tmp = k/data[j-1];
k = k%data[j-1];
int i=1;
for( i=1;i<n;i++)
{
if(isUse[i]==false)
{
tmp--;
}
if(tmp<0)
{
break;
}
}
res += i;
isUse[i] = true;
}
return res;
}
}