每日算法:Permutation Sequence

Permutation Sequence

 public static String getPermutation(int n, int k) {
        if (n == 1) {
            return "1";
        }
        //新建一个长度为n的数组每个数组元素就表第i个使用没有。
        boolean[] visited = new boolean[n+1];
        int[] dp = new int[n+1];
        //dp数组存放阶乘。
        dp[0] = 1;
        for (int i = 1; i < n+1; i++) {
            dp[i] = dp[i - 1] * i;
        }
        return perm(n, k, visited, dp);
    }

    public static String perm(int n, int k, boolean[] visited, int[] dp) {
        if(n == 0){
            return "";
        }
        int pos = 1;
        int cut = dp[n - 1];
        while (k > cut) {
            k -= cut;
            pos++;
        }
        String s = Integer.toString(getVisited(visited, pos));
        return s += perm(n - 1, k, visited, dp);
    }

    public static int getVisited(boolean[] visited, int index) {
        int o = 0;
        for (int i = 0; i < visited.length; i++) {
            if (!visited[i]) {
                o++;
            }
            if (o == index) {
                visited[i] = true;
                return i + 1;
            }
        }
        return 0;
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容