• 60. 第k个排列


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

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

    "123"
    "132"
    "213"
    "231"
    "312"
    "321"
    给定 n 和 k,返回第 k 个排列。

    说明:

    给定 n 的范围是 [1, 9]。
    给定 k 的范围是[1,  n!]。
    示例 1:

    输入: n = 3, k = 3
    输出: "213"
    示例 2:

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


    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/permutation-sequence
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    思路见题解:https://leetcode-cn.com/problems/permutation-sequence/solution/hui-su-jian-zhi-python-dai-ma-java-dai-ma-by-liwei/

     1 public class Solution {
     2     private boolean[] flag = null;
     3     private boolean ok = false;
     4     private char[] res = null;
     5 
     6     private int jie(int n){
     7         if (n < 0) return -1;
     8         int cnt = 1;
     9         while (n > 0){
    10             cnt *= n--;
    11         }
    12         return cnt;
    13     }
    14 
    15     // count:未使用数字的个数
    16     private boolean helper(int n, int count, int k){
    17         if (count == 0) {
    18             ok = true;
    19             return true;
    20         }
    21         for (int i = 1; i <= n; i++) {
    22             if (!flag[i]) {
    23                 // 计算分支i的序列个数
    24                 int cnt = jie(count-1);
    25                 if (k > cnt) {
    26                     k -= cnt;
    27                     continue;
    28                 }
    29                 // k <= cnt 进入当前分支i
    30                 flag[i] = true;
    31                 res[n-count] = (char)(i+'0');
    32                 if (helper(n,count-1,k))
    33                     return true;
    34             }
    35         }
    36         return false;
    37     }
    38 
    39     public String getPermutation(int n, int k) {
    40         flag = new boolean[n+1];
    41         res = new char[n];
    42         helper(n, n, k);
    43         return new String(res);
    44     }
    45 
    46     public static void main(String[] args) {
    47         String permutation = new Solution().getPermutation(3,3);
    48         System.out.println("permutation = " + permutation);
    49     }
    50 }
  • 相关阅读:
    DBCC修复不同情况下的损坏
    Python单例模式的4种实现方法
    osx 安装redis
    tornado系列文章
    Python中__init__和__new__的区别详解
    Tornado源码分析之http服务器篇
    tornado.ioloop.IOLoop相关文章
    How to use POST method in Tornado?
    https://github.com/diogobaeder/pycket
    Frequently Asked Questions
  • 原文地址:https://www.cnblogs.com/yfs123456/p/11614249.html
Copyright © 2020-2023  润新知