题目
用dfs超时
就要找到字母排列的顺序。比如说有n个字符,随意的选择出一个字符作为第一个字符,那么这个字符作为第一个字符出现的次数就是剩下字符排列组合的个数,也就是(n-1)!
class Solution {
public String getPermutation(int n, int k) {
List<String> list = new ArrayList<>();
for(int i=1;i<10;i++){
list.add(""+i);
}
int[] per = new int[n+1];
per[0] = 1;
for(int i=1;i<=n;i++){
per[i] = per[i-1]*i;
}
String s = "";
boolean[] flag = new boolean[10];
k--;
for(int i=n;i>0;i--){
int j = k/per[i-1];
k = k%per[i-1];
s += list.get(j);
list.remove(j);
}
return s;
}
}
这道题中涉及删除字符的操作,网上C++答案使用到数组或者字符串的earse操作。我这里用的是list中的remove。特意查了一下,java中的string中没有对应的操作,可以自己用substring写一个封装起来。