LeetCode-python 60.第k個(gè)排列

題目鏈接
難度: 中等 ??????類(lèi)型:數(shù)學(xué)


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

按大小順序列出所有排列情況,并一一標(biāo)記,當(dāng) n = 3 時(shí), 所有排列如下:

"123"
"132"
"213"
"231"
"312"
"321"
給定 n 和 k,返回第 k 個(gè)排列。

示例1

輸入: n = 3, k = 3
輸出: "213"

示例2

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

解題思路


對(duì)于n個(gè)數(shù)的排列,以‘1’開(kāi)頭的排列有(n-1)!個(gè),以‘2’開(kāi)頭的排列有(n-1)!個(gè),等等,通過(guò)這種方式可以計(jì)算出第k個(gè)排列是由哪個(gè)數(shù)字開(kāi)頭的

例如:
n=3, k=3
以‘1’開(kāi)頭的排列有2 (由(3-1)!計(jì)算可知)個(gè),第3個(gè),是由‘2’開(kāi)頭,現(xiàn)在數(shù)字只剩下‘1’,‘3’
問(wèn)題轉(zhuǎn)化為‘1’,‘3’兩個(gè)數(shù)構(gòu)成的排列中,第1(由3-2得)個(gè)排列的第1個(gè)數(shù)字是多少,依次類(lèi)推,確定所有數(shù)字

代碼實(shí)現(xiàn)

import math
class Solution:
    def getPermutation(self, n: int, k: int) -> str:
        kth = ''
        nums = list(map(str, range(1, n+1)))
        k -= 1
        while n>0:
            n -= 1
            f = math.factorial(n)
            index, k = divmod(k, f)
            kth += nums.pop(index)        
        return kth
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 在C語(yǔ)言中,五種基本數(shù)據(jù)類(lèi)型存儲(chǔ)空間長(zhǎng)度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來(lái)閱讀 3,402評(píng)論 0 2
  • 題目鏈接tag: Medium; question:??The set [1,2,3,...,n] contain...
    xingzai閱讀 338評(píng)論 0 1
  • 題目給出集合 [1,2,3,…,n],其所有元素共有 n! 種排列。 按大小順序列出所有排列情況,并一一標(biāo)記,當(dāng) ...
    HITZGD閱讀 201評(píng)論 0 0
  • 輕輕地,一二三,倒計(jì)時(shí)。 一、開(kāi)始 開(kāi)始的心情是雀躍而歡欣的,充滿好奇的張望,充滿血脈赍張的迫切感,仿佛每寫(xiě)一篇文...
    洛洛不言閱讀 448評(píng)論 0 0
  • 來(lái)大理已有旬日,日日見(jiàn)蒼山負(fù)雪巍立,心向往之,知有今日之登臨也。 至蒼山腳下,仰望,青松被覆。以其山之高也,故綠有...
    胡斐閱讀 669評(píng)論 3 4