leetCode - 第k个排列(Swift实现)
要求:
给出集合 [1,2,3,…,n]
,其所有元素共有 n! 种排列。
按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:
"123"
"132"
"213"
"231"
"312"
"321"
给定 n 和 k,返回第 k 个排列。
说明:
- 给定 n 的范围是 [1, 9]。
- 给定 k 的范围是[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 } }