【Leetcode】46. Permutations

Given a collection of?distinct?integers, return all possible permutations.

class Solution(object):

? ? def permute(self, nums):

? ? ? ? """

? ? ? ? :type nums: List[int]

? ? ? ? :rtype: List[List[int]]

? ? ? ? """

? ? ? ? return [[n]+p

? ? ? ? ? ? ? ? for i, n in enumerate(nums)

? ? ? ? ? ? ? ? for p in self.permute(nums[:i]+nums[i+1:])] or [[]]

1 第一種方法:使用遞歸,每次固定第一個元素,然后連接上后面元素的全排列,遞歸下去

2 遍歷每一個位置,對每一個位置都從集合中選一個未被選的元素

3?[[]]代表的是nums為空的情況

第二種方法:非遞歸的方式

class Solution(object):

? ? def permute(self, nums):

? ? ? ? """

? ? ? ? :type nums: List[int]

? ? ? ? :rtype: List[List[int]]

? ? ? ? """

? ? ? ? ret = [[]]

? ? ? ? for n in nums:

? ? ? ? ? ? temp = []

? ? ? ? ? ? for s in ret:

? ? ? ? ? ? ? ? for i in range(len(s)+1):

? ? ? ? ? ? ? ? ? ? temp.append(s[:i]+[n]+s[i:])

? ? ? ? ? ? ret = temp

? ? ? ? return ret

1 我們先得到前i個元素的全排列,然后加入第i+1個元素,這個元素可以加入到前面所有排列中,而且對于每一個排列,可以加入到這個排列中的所有位置;由于前i+1個元素的排列是沒有重復的,所以加入這個以后,也不會有重復的集合出現(xiàn)

2 使用temp變量記錄當前最外層循環(huán)下產(chǎn)生的所有排列

3 ret記錄之前產(chǎn)生的所有排列

4?for i in range(len(s)+1):這里為什么要遍歷到len(s),因為加入i+1后的長度是len(s)+1


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • <center>#1 Two Sum</center> link Description:Given an arr...
    鐺鐺鐺clark閱讀 2,374評論 0 3
  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 14,264評論 0 38
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗。 張土汪:刷leetcod...
    土汪閱讀 12,936評論 0 33
  • 今天突然發(fā)現(xiàn)我已經(jīng)關(guān)注了胖穎飛刀一年了 他是我見過最好的人。 他很溫柔,他很細膩,溫柔到我上個月才知道他是個男的,...
    EGGEGGEGG閱讀 237評論 0 0
  • 吃完早餐,我們換了另一個酒店——怡貝灣酒店。在酒店吃完飯,我們來到了今天第一個景點——嵊泗基湖沙灘。 ...
    youngerWang閱讀 318評論 0 3

友情鏈接更多精彩內(nèi)容