返回第k个序列,序列是共有n个元素的集合中的全排列
首先这是一个排列问题,用used,然后序列中没有重复的元素,只是对集合进行排列而已,当进行到第k个时候直接返回即可。
如何到k的时候返回,可以设置一个string类型的res,只要有值了,则下面的递归都直接返回。用一个stringBuffer来存储temp结果,方法是append和deleteCharAt。
class Solution {
String res="";
int count=1;
public String getPermutation(int n, int k) {
boolean[] used=new boolean[n];
StringBuffer buffer = new StringBuffer();
core(n,k,used,buffer,0);
return res;
}
public void core(int n,int k,boolean[] used,StringBuffer temp,int depth){
if(res!=""){
return; //依靠这个来摆脱到k之后的回溯。
}
if(depth==n){
if(count==k){
res=temp.toString(); //到k则给res赋值
}else{
count++;
//不到k则count++,但不用管s
}
return; //到k就要return
}
for(int i=0;i<n;i++){//i从0到n,有n个分支
if(!used[i]){//没有遍历过才进入
temp.append(i+1);
used[i]=true;
core(n,k,used,temp,depth+1);
temp.deleteCharAt(temp.length() - 1);
used[i]=false;
}
}
}
}