力扣刷题Python笔记:全排列

题目

给定一个 没有重复 数字的序列,返回其所有可能的全排列。

力扣刷题Python笔记:全排列_第1张图片
来源:力扣(LeetCode)

Python解法

回溯解法

该题目的要求是,给出输入数组的所有可能组合(有顺序)。当题目要求求出所有组合时,我们就应该考虑用回溯解法。(虽然想出来应该用哪种方法了,但是还是不会做~)

具体解题思路如下:
①定义一个与给定数组 nums 等长的数组 included,并且初始元素全部置为 0;
②定义一个函数,然后开始遍历数组中的每一个元素,当该元素已经被遍历过时,对应的 included 数组索引置为 1 ,进一步回溯时(更深的深度)不会再遍历该元素;
③当已遍历数组的长度等于原数组长度时,将该数组的加到结果数组中。

代码如下:

def permute(self, nums: List[int]) -> List[List[int]]:
    def permute_method(cur_list, length):
        if length == n:
            result.append(cur_list)
            return
        for i in range(n):
            if included[i] :
                continue
            included[i] = 1
            permute_method(cur_list + [nums[i]], length + 1)
            included[i] = 0

    n = len(nums)
    result = []
    included = [0] * n
    permute_method([],0)
    return result

你可能感兴趣的:(力扣python刷题,算法)