LeedCode第k个排列

题目

给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。

按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:

"123" "132" "213" "231" "312" "321"

给定 n 和 k,返回第 k 个排列。

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/permutation-sequence

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解答及思路

源码

class Solution {

    public String getPermutation(int n, int k) {

        List<Integer> nums = new ArrayList<>();

        int num = 0;

        int temp = 0;

        for(int i=1;i<=n;i++){

            nums.add(i);

        }

        for(int i = n-1;i>0;i--){

            temp = (k-1)/fun1(i);

            k = k-fun1(i)*temp;

            num += nums.remove(temp)*fun2(i);

        }

        num = nums.remove(0)+num;

        return ""+num;

    }

    public static int fun1(int n){

        int num = 1;

        for(int i=2;i<=n;i++){

            num *= i;

        }

        return num;

    }

    public static int fun2(int n){

        int num = 1;

        for(int i=0;i<n;i++){

            num*=10;

        }

        return num;

    }

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容