首页 > 编程语言 >day29 回溯算法part5 代码随想录算法训练营 47. 全排列 II

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

时间:2024-02-19 17:44:06浏览次数:26  
标签:used day29 nums res self 随想录 len 算法 path

题目: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

标签:used,day29,nums,res,self,随想录,len,算法,path
From: https://www.cnblogs.com/liqi175/p/18021624

相关文章

  • 代码随想录算法训练营第二十二天|235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树
    二叉搜索树的最近公共祖先 题目链接:235.二叉搜索树的最近公共祖先-力扣(LeetCode)思路:只要利用二叉搜索树特性,只要当前节点的值位于要求的两个节点之间,就必定是我们要找的节点。最简单的一集。classSolution{public:TreeNode*lowestCommonAncestor(TreeNode*root,......
  • 复习回顾-回溯算法-46. 全排列
    注意点&感悟:used是全局的,通过改变标记来确定本层是否搜索完毕,用used跳过[1,1,1]这种不用start_index了题目链接:46.全排列自己独立写的代码:查看代码classSolution:defpermute(self,nums:List[int])->List[List[int]]:#不用start_index了|用used......
  • Json 递归解析算法笔记
    需求:最近需要处理包含多层的Json字符串解析的问题,比如需要将所有的键值对的值替换,或者将键值对的键替换,包括嵌套对象里面的。大致知道需要使用递归来操作,先记录大致步骤吧。思路:写好一个固定的函数专门处理替换步骤;在这个函数内分别判断值是数组,还是对象,还是值(值走上面的递......
  • 代码随想录算法训练营第二十二天 | 450.删除二叉搜索树中的节点, 701.二叉搜索树中的
     450.删除二叉搜索树中的节点 已解答中等 相关标签相关企业 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点......
  • day29 回溯算法part5 代码随想录算法训练营 46. 全排列
    题目:46.全排列我的感悟:看不下去视频,可以先看文字讲解。看答案。带着疑问去看视频,效果会更好。加油!理解难点:排列,不用start_index了借助used=1来过滤掉[1,1,1]这种情况。如果不加ifused[i]==1,continue就会出现重复的。如下图: 代码示例:classSolution:d......
  • RTS游戏核心技术 流场寻路算法详解
       流场寻路技术是实时战略游戏(RTS)中常用的路径规划算法,通过模拟流体在地图上的流动来为单位寻找最优路径。这种技术能够有效处理大规模地图、大量单位和动态环境变化的路径规划问题,提高游戏的实时性和可玩性。下面详细介绍RTS游戏中流场寻路技术的实现步骤和关键技术点......
  • 前端知识回顾概览--数据结构与算法
    1.算法-数据结构篇实现一个LRU缓存求环状链表树的前序、中序、后序遍历树的层序遍历获取树的层级实现类数组转数组实现DOM转JSON实现JSON转DOM实现树转数组实现数组转树实现对象打平2.算法-排序与双指针等n平方复杂度的排序有哪些?如何实现冒泡排序,如何进......
  • day29 回溯算法part5 代码随想录算法训练营 491. 非递减子序列
    题目:491.非递减子序列我的感悟:难不怕,不行就抄一遍,再默写一遍,多记忆几遍。加油!!!理解难点:uset是本层的, res收获的是节点(满足要求的节点),不用return(用了return是仅仅收集叶子节点的)判断的逻辑,是nums[i]当前的节点和目标的path的区别代码示例:classSolution:......
  • 第十六节:各种排序算法总结和性能测试
    一.        二.        三.         !作       者:Yaopengfei(姚鹏飞)博客地址:http://www.cnblogs.com/yaopengfei/声     明1:如有错误,欢迎讨论,请勿谩骂^_^。声     明2:原创博客请在转载......
  • 复习回顾-回溯算法-90. 子集 II 【犹豫】
    注意点&感悟:对过滤条件放在for里面,还是外面,有些犹豫了。【疑问,先搁置】我感觉for里面,应该是进去树枝的过程,for外面写,应该是终止条件。================又看了一眼视频,for里面是取数的过程,所以,应该取数的过程,进行了剪枝。题目链接:90.子集II自己独立写的代码:classSo......