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

题目:47. 全排列 II

我的感悟:

  • 用了一层判断,感觉也挺好用的

理解难点:

  • 老师的写法,主要是理解used【i】 和used[i-1]的概念
  • 我说怎么参考答案看不懂呢,它把两个判断放在一起写了。

我的代码:用了一层判断

class Solution:
    def permuteUnique(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):
            if path[:] not in res:
                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()

 

通过截图:

老师的写法:

class Solution:
    def permuteUnique(self, nums: List[int]) -> List[List[int]]:
        res = []
        used = [0] * len(nums)
        nums.sort()
        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)):
            # 1.跳过树层 重复
            if i> 0 and nums[i] == nums[i-1] and used[i-1] == 0:
                continue
            # 2.跳过树枝 重复 (跳过上一个重复项)
            if used[i] ==1:
                continue
            path.append(nums[i])
            used[i] = 1
            self.backtracking(nums,path,res,used)
            used[i] = 0
            path.pop()

老师这个的通过截图:

资料:

47.全排列 II 

本题 就是我们讲过的 40.组合总和II 去重逻辑 和 46.全排列 的结合,可以先自己做一下,然后重点看一下 文章中 我讲的拓展内容。 used[i - 1] == true 也行,used[i - 1] == false 也行 

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

 

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

posted @ 2024-02-19 17:39  o蹲蹲o  阅读(2)  评论(0编辑  收藏  举报