day29 回溯算法part5 代码随想录算法训练营 46. 全排列

题目:46. 全排列

我的感悟:

  • 看不下去视频,可以先看文字讲解。看答案。带着疑问去看视频,效果会更好。
  • 加油!
  • ===========、
  • 看了一遍视频,确实跟我想的差不多。
  • 遇到used[i]就跳过。

理解难点:

  • 排列,不用start_index了
  • 借助used = 1来过滤掉[1,1,1]这种情况。
  • 如果不加if used[i] == 1,continue 就会出现重复的。如下图:
  •  

代码示例:

class Solution:
    def permute(self, nums: List[int]) -> List[List[int]]:
        res = []
        used = [0] * len(nums)
        self.backtracking(nums,[],res,used)
        return res
        
    def backtracking(self,nums,path,res,used):
        # 终止条件
        if len(path) == len(nums):
            res.append(path[:])
            return

        for i in range(len(nums)):
            if used[i] == 1:    # 说明已经使用过了
                continue
            path.append(nums[i])
            used[i] = 1
            self.backtracking(nums,path,res,used)
            used[i] = 0
            path.pop()

通过截图:

扩展写法:

资料:

46.全排列 

本题重点感受一下,排列问题 与 组合问题,组合总和,子集问题的区别。 为什么排列问题不用 startIndex 

https://programmercarl.com/0046.%E5%85%A8%E6%8E%92%E5%88%97.html

视频讲解:https://www.bilibili.com/video/BV19v4y1S79W

posted @ 2024-02-19 14:23  o蹲蹲o  阅读(1)  评论(0编辑  收藏  举报