leetcode刷題python之第個排列

2021-09-28 23:15:39 字數 765 閱讀 8719

思路:

對於長度為n的數字字串,第k位之後的排列可能有(n-k)!(第一位之後的排列有(n-1)!),所以當如果k-1>(n-1)!,則第一位就不能是1,為(k-1)//(n-1)!,k再變為(k-1)%(n-1)!+1,再判斷第二位為(k-1)//(n-2)!,k再變為(k-1)%(n-1)!+1,以此類推來判斷每一位的數字,

使用k-1是因為減了1才可以正常的迭代,比如n為2,k為2,如果使用k//(n-1)!就會出錯

from math import factorial

class solution:

def getpermutation(self, n: int, k: int) -> str:

res = ''

point = n - 1

arrange = [i for i in range(1, n + 1)]

while k > 1:

var = arrange[(k - 1)//factorial(point)]

# print(var)

res += str(var)

arrange.remove(var)

k = (k - 1) % factorial(point) + 1

point -= 1

while arrange:

res += str(arrange[0])

arrange.remove(arrange[0])

return res

Leetcode鍊錶刷題 pytho語言

為方便後續的使用查詢,記錄一下 函式包括 找到兩個單鏈表相交的起始節點 反轉單鏈表 刪除鍊錶中等於給定值 val 的所有節點 definition for singly linked list.class listnode object def init self,x self.val x self...

開始刷題LeetCode

今天決定開始刷題,每天至少一題,如果題目確實沒有解決出來沒有關係,但是要保證每天至少接觸了一道新的題目!一定要堅持下去,現在是個菜鳥可能會感覺有點難度,堅持下去,總有一天會好的!今天是第一天,做的第乙個題目 reverse words in a string given an input strin...

leetcode刷題歷程

難度 簡單 題目 給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 ...