算法设计与分析—全排列

课程内容回顾:

回溯法

递归模板

class Solution:
    def permute(self, nums: List[int]) -> List[List[int]]:
        res = []  #存放符合条件结果的集合
        path = []  #用来存放符合条件的结果
        used = []  #用来存放已经用过的数字
        def backtrack(nums,used):
            if len(path) == len(nums):
                return res.append(path[:])  #此时说明找到了一组
            for i in range(0,len(nums)):
                if nums[i] in used:
                    continue  #used里已经收录的元素,直接跳过
                path.append(nums[i])
                used.append(nums[i])
                backtrack(nums,used)
                used.pop()
                path.pop()
        backtrack(nums,used)
        return res

题目1、全排列
给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。

def permute(self, nums):
    """
    :type nums: List[int]
    :rtype: List[List[int]]
    """
    result=[]    # 用来存储结果
    L=[]         # 用来记录每次序列的数字
    length=len(nums)
    self.index=0    # 使用index 减少比较时求长度的次数
    def dfs():
        if self.index==length:
            result.append(L[:])
        else:
            for i in range(length):
                if nums[i] not in L:
                    L.append(nums[i])
                    self.index+=1
                    dfs()
                    L.pop()
                    self.index-=1
    dfs()
    return result

猜你喜欢

转载自blog.csdn.net/qq_39740279/article/details/121014295