leetCode - 第k个排列(Swift实现)

要求:

给出集合 [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
    }
}

 

posted @ 2018-12-24 15:01  清水00  阅读(212)  评论(0编辑  收藏  举报