久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    46. 全排列(Python)

     孟玄同mxy 2021-11-18

    更多精彩內容,請關注【力扣中等題】

    題目

    難度:★★★☆☆
    類型:數學
    方法:回溯法

    題目

    給定一個沒有重復數字的序列,返回其所有可能的全排列。

    示例

    輸入: [1,2,3]
    輸出:
    [
    [1,2,3],
    [1,3,2],
    [2,1,3],
    [2,3,1],
    [3,1,2],
    [3,2,1]
    ]

    解答

    全排列其實可以使用python內置的permutations函數,例如求['a', 'b', 'c']的全排列,可以使用:itertools.permutations(['a', 'b', 'c'],3)快速得到。這里參考了大佬博客

    方案1:回溯法

    我們舉個例子,以字符串列表['a', 'b', 'c']為例,我們逐個位確定全排列的所有可能。回溯法的原理在于在前n-1位元素確定的情況下,求取n位以后的全排列。本例中,首先固定第0位,就是分別將第0位與它本身及后面各位元素交換,得到3種不同的可能,在固定這一位后,在考慮第1位的可能性,將第1位與它本身及其后元素交換,有兩種可能性,當前兩位元素確定后,最后一位只有一種可能性。因此一共有6種可能。

    1. 將列表的第0位與第0位交換(相當于不變),此時列表變為['a', 'b', 'c'];
      1.1 將列表的第1位與第1位交換(相當于不變),得到列表['a', 'b', 'c'];
      1.2 將列表的第1位與第2位交換,得到列表['a', 'c', 'b'];

    2. 將列表的第0位與第1位交換,得到列表['b', 'a', 'c'];
      2.1 將列表的第1位與第1位交換(相當于不變),得到列表['b', 'a', 'c'];
      2.2 將列表的第1位與第2位交換,得到列表['b', 'c', 'a'];

    3. 將列表的第0位與第2位交換,得到列表['c', 'b', 'a'];
      3.1 將列表的第1位與第1位交換(相當于不變),得到列表['c', 'b', 'a'];
      3.2 將列表的第1位與第2位交換,得到列表['c', 'a', 'b']

    這里需要注意的是,每次交換元素并回溯尋找后,都要將元素交換回來,保持沒有交換前的狀態。

    class Solution:
        def permute(self, nums):
            """
            :type nums: List[int]
            :rtype: List[List[int]]
            """
    
            def backtrack(position, end):
                """
                Find possible results using backtrack.
                :param position:
                :param end:
                :return:
                """
    
                if position == end:
                    res.append(nums[:])
                    return
    
                for index in range(position, end):
                    nums[index], nums[position] = nums[position], nums[index]
                    backtrack(position + 1, end)
                    nums[index], nums[position] = nums[position], nums[index]
    
            res = []
            backtrack(0, len(nums))
            return res
    

    方案2:深度優先搜索

    與回溯法類似,增加臨時列表用來存儲是否查看過變量。

    class Solution:
        def permute(self, nums):
            """
            :type nums: List[int]
            :rtype: List[List[int]]
            """
    
            visit = [True for _ in range(len(nums))]
            tmp = nums[:]
    
            def dfs(position):
                if position == len(nums):
                    res.append(tmp[:])
                    return
    
                for index in range(0, len(nums)):
                    if visit[index]:
                        tmp[position] = nums[index]
                        visit[index] = False
                        dfs(position + 1)
                        visit[index] = True
    
            res = []
            dfs(0)
            return res
    

    如有疑問或建議,歡迎評論區留言~

      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 亚洲AV无码一区二区三区人| 精品无码国产一区二区三区51安| 狠狠色丁香婷婷综合尤物 | 亚洲精品成人福利网站| 国产综合色产在线精品| 奇米四色7777中文字幕| 国产精品电影久久久久电影网| 日韩精品无码一区二区三区AV| 在线涩涩免费观看国产精品 | 草裙社区精品视频播放| 亚洲国产精品福利片在线观看| 精选国产av精选一区二区三区 | 丁香婷婷色综合激情五月 | 老熟妇高潮一区二区三区| 狠狠亚洲色一日本高清色| 手机看片AV永久免费| 91精品国产午夜福利| 久久无码人妻丰满熟妇区毛片| 国产午夜精品福利视频| 天天躁日日躁狠狠躁欧美老妇| 国产成人高清精品亚洲| 午夜无码大尺度福利视频| 黄色A级国产免费大片视频| 99久久精品国产一区二区蜜芽 | 亚洲国产精品人人做人人爱 | 精品无码国产污污污免费| A级毛片免费完整视频| 精品国产精品中文字幕| 精品无码国产自产拍在线观看| 国产睡熟迷奷系列网站| 日韩精品中文字幕有码| 亚洲乱码日产精品一二三| 亚洲成在人线AV品善网好看| 精品超清无码视频在线观看| 亚洲 校园 欧美 国产 另类| 无码国产偷倩在线播放| 又粗又黑又大的吊AV| 亚洲国产无套无码AV电影| 日本高清在线天码一区播放| 国产在线中文字幕精品| 蜜臀久久99精品久久久久久小说 |