[LeetCode]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"

思路解析
首先我們要確定首位置是什么?我們整體看一下所有數;

"123"
"132"
"213"
"231"
"312"
"321"
我們發現當首數字確定了,后面和首數字組成數字的個數相等的!

比如: 首數字為1,后面有組成兩個數123,132,可以組成2個數.當首數字為2,3同樣都是.

所有我們要找k = 3的數字 ,我們只需要 3/2 便可找到首數字什么,

下面依次類推!

其實就是一道找規律題目!

class Solution:
    def getPermutation(self, n: int, k: int) -> str:
        num = [str(i) for i in range(1, n+1)]
        res = ""
        n -= 1
        while n > -1:
            t = math.factorial(n)
            loc = math.ceil(k / t) - 1
            res += num[loc]
            num.pop(loc)
            k %= t
            n -= 1
        return res

AC60
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 題目鏈接難度: 中等 類型:數學 給出集合 [1,2,3,…,n],其所有元素共有 n! 種排列...
    wzNote閱讀 2,703評論 0 0
  • 在C語言中,五種基本數據類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 3,402評論 0 2
  • 題目鏈接tag: Medium; question:??The set [1,2,3,...,n] contain...
    xingzai閱讀 338評論 0 1
  • 第k個排列 題目敘述: 給出集合 [1,2,3,…,n],其所有元素共有 n! 種排列。按大小順序列出所有排列情況...
    一萍之春閱讀 829評論 0 2
  • 很奇怪,人很容易受到環境的影響。我們需要一種友善的緊張氣氛,一種溫暖的、被關懷的感覺。只有在這種環境中,我們才能自...
    Ahlam_大果兒閱讀 461評論 0 1