leetcode——60.第K个排列

public String getPermutation(int n, int k) {
        //itemlist 为原始顺序数列
        List<Integer> itemList = new ArrayList<>();
        if(n==1){
            return "1";
        }
        //阶乘数据
        List<Integer> nList = new ArrayList<>();
        nList.add(1);
        for(int i=1;i<=n;i++){
            itemList.add(i);
            if(i>=2){
                //计算阶乘值 N! = n* (N-1)!
                int nData = nList.get(i-2);
                nList.add(i*nData);
            }
        }

        if(k > nList.get(nList.size()-1)){
            return "";
        }

        int index = n-1;

        k = k-1;

        StringBuilder itemStr = new StringBuilder();

        while(index>=0){
            if(index ==0){
                itemStr.append(itemList.get(0));
                break;
            }
            //获取N-1的阶乘值
            int result = nList.get(index-1);
            //获得当前熏循环的第一个数字的索引
            int firstIndex = k/result;
            //获取当前第一个数字
            int firstNum = itemList.get(firstIndex);
            itemStr.append(firstNum);
            itemList.remove(firstIndex);
            index = index -1;
            k = k%result;
        }
        return itemStr.toString();
    }

——2020.7.10

我的前方是万里征途,星辰大海!!
原文地址:https://www.cnblogs.com/taoyuxin/p/13277711.html