首页 > 编程语言 >代码随想录算法训练营第27天 | 回溯3:93.复原IP地址、78.子集、90.子集II

代码随想录算法训练营第27天 | 回溯3:93.复原IP地址、78.子集、90.子集II

时间:2024-07-18 15:52:20浏览次数:14  
标签:27 return nums self 随想录 len 子集 path

代码随想录算法训练营第27天 | 回溯3:93.复原IP地址、78.子集、90.子集II

93.复原IP地址
https://leetcode.cn/problems/restore-ip-addresses/submissions/547344868/
代码随想录
https://programmercarl.com/0093.复原IP地址.html#算法公开课
78.子集
https://leetcode.cn/problems/subsets/description/
代码随想录
https://programmercarl.com/0078.子集.html
90.子集II
https://leetcode.cn/problems/subsets-ii/description/
代码随想录
https://programmercarl.com/0090.子集II.html

93.复原IP地址

题解思路

  • 和切割回文字符串一样
  • 判断条件有区别
  • 考虑是否为单纯为0

题解代码

class Solution:
    def __init__(self):
        self.path = []
        self.res = []
    def back_trace(self,s,index):
        if len(self.path)==4 and index==len(s):
            self.res.append(".".join(self.path[:]))
            return
        if len(self.path)>4:
            return
        for i in range(index,len(s)):
            if self.panduan(s[index:i+1]):
                ## 往后取一位
                self.path.append(s[index:i+1])
                self.back_trace(s,i+1)
                self.path.pop()
    def panduan(self,s):
        if len(s)>1 and s[0]=="0":
            ##单独一个0是特殊情况
            return False
        try:
            data = int(s)
            if 0<=data<=255:
                return True
            else:
                return False
        except:
            return False
    def restoreIpAddresses(self, s: str) -> List[str]:
        if len(s)==0:
            return self.res
        self.back_trace(s,0)
        return self.res

78.子集

题解思路

  • 数组子集:遍历所有可能节点

题解代码

class Solution:
    def __init__(self):
        self.res = []
        self.path = []
    def back_trace(self,nums,index,used):
        self.res.append(self.path[:])
        if index==len(nums):
            return

        for i in range(index,len(nums)):
            self.path.append(nums[i])
            self.back_trace(nums,i+1,used)
            self.path.pop()


    def subsets(self, nums: List[int]) -> List[List[int]]:
        if len(nums)==0:
            return [[]]
        self.back_trace(nums,0,[0]*len(nums))
        return self.res

90.子集II

题解思路

  • 和前面思路重复:单个元素不能重复利用;但是可以出现重复元素
class Solution:
    def __init__(self):
        self.res = []
        self.path = []
    def back_trace(self,nums,index,used):
        self.res.append(self.path[:])
        if index==len(nums):
            return

        for i in range(index,len(nums)):
            if i>0 and nums[i]==nums[i-1] and used[i-1]==0:
                continue
            ##去掉重复元素
            used[i]=1
            self.path.append(nums[i])
            self.back_trace(nums,i+1,used)
            ## 不重复使用元素
            self.path.pop()
            used[i]=0

    def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:
        if len(nums)==0:
            return [[]]
        nums = sorted(nums)
        self.back_trace(nums,0,[0]*len(nums))
        return self.res
``

标签:27,return,nums,self,随想录,len,子集,path
From: https://www.cnblogs.com/P201821440041/p/18307427

相关文章

  • 代码随想录算法训练营第16天|LeetCode112路径总和LeetCode113路径总和iiLeetCode106.
    代码随想录算法训练营Day16代码随想录算法训练营第16天|LeetCode112路径总和LeetCode113路径总和iiLeetCode106.从中序与后序遍历序列构造二叉树LeetCode105.从前序与中序遍历序列构造二叉树目录代码随想录算法训练营前言LeetCode112路径总和,LeetCode113路径......
  • 代码随想录算法训练营第 15 天 |LeetCode110平衡二叉树 LeetCode257二叉树的所有路径
    代码随想录算法训练营Day15代码随想录算法训练营第15天|LeetCode110平衡二叉树LeetCode257二叉树的所有路径LeetCode404左叶子之和LeetCode222完全二叉树节点之和目录代码随想录算法训练营前言LeetCode110平衡二叉树LeetCode257二叉树的所有路径LeetCode404左......
  • 代码随想录算法训练营第28天 | 回溯4:491.递增子序列、46.全排列、47.全排列 II
    代码随想录算法训练营第28天|回溯4:491.递增子序列、46.全排列、47.全排列II491.递增子序列https://leetcode.cn/problems/non-decreasing-subsequences/代码随想录https://programmercarl.com/0491.递增子序列.html#算法公开课46.全排列https://leetcode.cn/problems/pe......
  • ctfshow web入门 xss web327--web333 存储型和七七八八的
    存储型漏洞web327这道题貌似和反射型的xss差不多,直接打就行web328body和svg的好像不行<script>window.open('http://ceye地址/'+document.cookie)</script><script>window.open('http://hrcgnc.ceye.io/'+document.cookie)</script>先注册,密码多于6位很明显在这......
  • 127.0.0.0和localhost区别
    localhost:一个别名,指代为环回保留IP,但不是专门指127.0.0.1,而是指为环回保留的整个IP地址范围。可以通过配置主机文件修改IP地址到主机名的映射,将localhost连接到不通的IP地址。localhost在本机上,127.0.0.1在虚拟网卡上。注意pinglocalhost不显示TTL,绕过了TCP/IP的下层,不通过链......
  • 代码随想录二刷复习(二分法)
    二分法模板:1:左闭右闭区间写法第一种写法,我们定义target是在一个在左闭右闭的区间里,也就是[left,right](这个很重要非常重要)。区间的定义这就决定了二分法的代码应该如何写,因为定义target在[left,right]区间,所以有如下两点:while(left<=right)要使用<=,因为left==rig......
  • iOS开发基础127-深入探讨KVO
    一、基础KVO(Key-ValueObserving,键值观察)是Cocoa提供的一种机制,它允许我们观察属性的变化并做出响应。这种机制非常强大,广泛应用于各种编程场景,如数据绑定、状态变化监控等。在深入了解KVO之前,我们先从KVO的基本概念开始,然后逐步探讨其深层次应用和一些使用实践的注意事项......
  • 「代码随想录算法训练营」第十三天 | 二叉树 part3
    110.平衡二叉树题目链接:https://leetcode.cn/problems/balanced-binary-tree/题目难度:简单文章讲解:https://programmercarl.com/0110.平衡二叉树.html视频讲解:https://www.bilibili.com/video/BV1Ug411S7my题目状态:通过思路:采用递归的方式,遍历每个节点的左右孩子的深度......
  • 基于java+springboot+vue实现的实验室管理系统(文末源码+Lw)127
    基于SpringBoot+Vue的实现的实验室管理系统(源码+数据库+万字Lun文+流程图+ER图+结构图+演示视频+软件包)系统功能:实验室管理系统管理员功能有个人中心,学生管理,教师管理,公告信息管理,知识库管理,实验课程管理,实验室信息管理,实验室预约管理,实验设备管理,采购记录管理,维修记录管理......
  • 基于java+springboot+vue实现的实验室管理系统(文末源码+Lw)127
     基于SpringBoot+Vue的实现的实验室管理系统(源码+数据库+万字Lun文+流程图+ER图+结构图+演示视频+软件包)系统功能:实验室管理系统管理员功能有个人中心,学生管理,教师管理,公告信息管理,知识库管理,实验课程管理,实验室信息管理,实验室预约管理,实验设备管理,采购记录管理,维修记录......