zoukankan      html  css  js  c++  java
  • 60. 第k个排列

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

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

    1. "123"
    2. "132"
    3. "213"
    4. "231"
    5. "312"
    6. "321"

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

    说明:

    • 给定 n 的范围是 [1, 9]。
    • 给定 的范围是[1,  n!]。

    示例 1:

    输入: n = 3, k = 3
    输出: "213"
    

    示例 2:

    输入: n = 4, k = 9
    输出: "2314"

    class Solution {
        int kth ;
        List<Integer> res;
        public String getPermutation(int n, int k) {
            List<Integer> list = new ArrayList<Integer>();
            boolean[] visited = new boolean[n];
            bt(n,k,visited,list);
            String s = "";
            for(int num : res){
                s += num;
            }
            return s;
        }
        private void bt(int n,int k,boolean[] visited,List<Integer> list){
            if(list.size() == n){
                kth++;
                if(kth == k){
                    res = new ArrayList<>(list);
                    return;
                }
            }
            for(int i = 1;i <= n;i++){
                if(!visited[i - 1]){
                    visited[i - 1] = true;
                    list.add(i);
                    bt(n,k,visited,list);
                    list.remove(list.size() - 1);
                    visited[i - 1] = false;
                }
            }  
        }
    }
    一回生,二回熟
  • 相关阅读:
    监控JVM回收
    linux JDK安装
    linux 免登陆设置
    搭建redis集群总结
    redis开启持久化
    搭建redis主从复制,遇到的问题总结
    Redis配置参数说明
    模板模式
    观察者模式
    适配器模式
  • 原文地址:https://www.cnblogs.com/zzytxl/p/12668517.html
Copyright © 2011-2022 走看看