package no51_100;
public class subject060 {
class Solution {
public String getPermutation(int n, int k) {
boolean[] used = new boolean[n];
StringBuffer result = new StringBuffer();
while(n!=0) {
int f = fac(n-1);
int min_n= (int)Math.ceil(k*1.0/f);
if(min_n==0) {//这个地方很关键,写代码的时候是试出来的,解释性不充分
min_n = n;
}
int temp = getMin_n(min_n, used);
result.append( temp );
n--;
k = k % f;
}
return result.toString();
}
//算阶乘
private int fac(int n) {
int res = 1;
for(int i=1; i<=n; i++) {
res *= i;
}
return res;
}
//获取没有用到的数中第n小的数
private int getMin_n(int min_n, boolean[] used) {
int count = 0;
int result = 0;
for(int i=1; i<=used.length; i++) {
if( !used[i-1] ) {
count++;
}
if(count==min_n) {
used[i-1] = true;
result = i ;
break;
}
}
return result;
}
}
public static void main(String[] args) {
subject060 subject = new subject060();
Solution s = subject.new Solution();
//int n = 4, k = 9;
//int n=3, k=2;
int n=1, k=1;
String result = s.getPermutation(n, k);
System.out.println(result);
}
}
leetcode 60
于 2019-05-08 15:20:18 首次发布