zoukankan      html  css  js  c++  java
  • leetCode

    要求:

    给出集合 [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!]。
    class Solution {
        func getPermutation(_ n: Int, _ k: Int) -> String {
            var nums: [Int] = [1,2,3,4,5,6,7,8,9]
            var factorials: [Int] = [nums[0]]
            for (index, value) in nums.enumerated() {
                if index > 0 && index < n {
                    factorials.append(factorials[index - 1] * value)
                }
            }
            
            var res: String = ""
    
            var tempK = k - 1
            for index in (0..<factorials.count).reversed() {
                var appendStr: String
                
                if index == 0 {
                    appendStr = String(nums[index])
                }else {
                    appendStr = String(nums[tempK / factorials[index - 1]])
                    nums.remove(at: tempK / factorials[index - 1])
                    tempK = tempK % factorials[index - 1]
                }
                res.append(appendStr)
            }
            return res
        }
    }
  • 相关阅读:
    flink checkpoint机制的实现
    openjdk源码分析之AtomicLong
    cpp之宏和函数调用约定
    JNA 相关问题
    spark RDD
    最长连续序列
    买卖股票的最佳时机
    二叉树展开为链表
    不同的二叉搜索树
    柱状图中最大的矩形
  • 原文地址:https://www.cnblogs.com/kaisi/p/10168633.html
Copyright © 2011-2022 走看看