题解 | #第K个n的排列#

第K个n的排列

http://www.nowcoder.com/practice/1595969179464e4c940a90b36abb3c54

import java.util.*;

public class Solution {

//这是一道递归排列组合的题目,要求就是组合的字符不能重复
public String KthPermutation (int n, int k) {
    // write code here
    boolean[] isUsed = new boolean[n];
    StringBuilder stringBuilder = new StringBuilder();
    ArrayList<ArrayList<Integer>> arrayLists = new ArrayList<>();
    LinkedList<Integer> linkedList = new LinkedList<>();
    ArrayList<Integer> list = new ArrayList<>();
    for (int i = 1; i <= n; i++) {
        list.add(i);
    }
    computeArray(n,list,linkedList,arrayLists,0,isUsed);
    list = arrayLists.get(k-1);
    for (Integer integer : list) {
        stringBuilder.append(integer);
    }
    return stringBuilder.toString();
}

private void computeArray(int length, ArrayList<Integer> list, LinkedList<Integer> linkedList, ArrayList<ArrayList<Integer>> arrayLists,int depth,boolean[] isUsed) {
    if(depth==length){
        arrayLists.add(new ArrayList<>(linkedList));
        return;
    }
    for (int j = 0; j < list.size(); j++) {
        if(isUsed[j]){
            continue;
        }
        if(j>0&&list.get(j).equals(list.get(j-1))&&!isUsed[j-1]){
            continue;
        }
        linkedList.add(list.get(j));
        isUsed[j]=true;
        computeArray(length,list,linkedList,arrayLists,depth+1,isUsed);
        linkedList.removeLast();
        isUsed[j]=false;
    }
}

}

全部评论

相关推荐

06-06 03:40
已编辑
电子科技大学 Java
在秋招的小白菜很想养修勾:一眼 苍穹外卖+谷粒商城,项目换一换吧,可以找一些付费知识星球博主带带,避免烂大街。多投投大厂,背背八股,你这学历乱杀了,等实习经验到位,到时候大厂闭眼选
投递美团等公司7个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务