当前位置: 首页 > news >正文

算法记录 | Day28 回溯算法

93.复原IP地址

思路:

1.确定回溯函数参数:定义全局遍历存放res集合和单个path,还需要

  • s字符

  • startindex(int)为下一层for循环搜索的起始位置。

2.终止条件:当len(path)==4且遍历到字符串最末尾,将path加入res,len(path)>4 return

3.遍历过程:取temp= s[startindex:i+1],判断是否合法

  • 不能超过255
  • 0不能为前导
    • 不能为00
    • 不能为非0数字前导,e.g: 011
class Solution:def restoreIpAddresses(self, s: str) -> List[str]:res = []path = []def backtrack(s,startindex):if len(path)>4:return if len(path) == 4 and startindex == len(s):res.append(".".join(path))return for i in range(startindex, len(s)):temp = s[startindex:i+1]if int(temp)>255:continueif int(temp) == 0 and i!=startindex:continueif s[startindex]=='0'and int(temp)>0:continuepath.append(temp)backtrack(s,i+1)path.pop()backtrack(s,0)return res

78. 子集

思路:

1.确定回溯函数参数:定义全局遍历存放res集合和单个path,还需要

  • nums数组
  • startindex(int)为下一层for循环搜索的起始位置。

2.终止条件:当startindex >len(nums),完成遍历终止

3.遍历过程:求取子集问题,不需要任何剪枝!因为子集就是要遍历整棵树

class Solution:def subsets(self, nums: List[int]) -> List[List[int]]:res = []path = []def backtrack(nums,startindex):if startindex>len(nums):returnif len(path)<=len(nums):res.append(path[:])for i in range(startindex,len(nums)):path.append(nums[i])backtrack(nums,i+1)path.pop()backtrack(nums,0)return res

90. 子集 II

思路:

1.确定回溯函数参数:定义全局遍历存放res集合和单个path,还需要

  • nums数组
  • startindex(int)为下一层for循环搜索的起始位置。

2.终止条件:当startindex >len(nums),完成遍历终止

3.遍历过程:去重,先对nums排序,for循环层不能使用相同元素,排序数组,判断nums[i]==nums[i-1]

class Solution:def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:res = []path = []nums.sort()def backtrack(nums,startindex):if startindex>len(nums):returnif len(path)<=len(nums):res.append(path[:])for i in range(startindex,len(nums)):if i>startindex and nums[i] ==nums[i-1]:continuepath.append(nums[i])backtrack(nums,i+1)path.pop()backtrack(nums,0)return res
http://www.lryc.cn/news/59142.html

相关文章:

  • 气象历史数据和空气质量历史数据资源汇总免费
  • 【区块链】走进web3的世界-对于前端来说,web2与web3的区别
  • 深拷贝和浅拷贝
  • 【回眸】ChatGPT Plus(GPT4体验卡)
  • 走进小程序【七】微信小程序【常见问题总结】
  • 光电隔离转换器 直流信号放大器 导轨安装DIN11 IPO OC系列
  • 语聊房app的开发以及运营思路
  • 目标检测基础之IOU计算
  • 从spring boot泄露到接管云服务器平台
  • 大数据技术——spark集群搭建
  • 嵌入式学习笔记汇总
  • Python 全栈系列220 Tornado的服务搭建
  • ESXi安装CentOS
  • WebTest搭建
  • 什么性格的人适合报考机械类专业?(高考志愿填报选专业)
  • 进程概念详解
  • C语言基础——指针
  • 反序列化渗透与攻防(二)之Java反序列化漏洞
  • 优先级队列的模拟实现(仿函数)
  • Python pandas和numpy用法参考(转)
  • mysql数据库的在线数据备份与数据恢复
  • Vue3自定义指令之前端水印功能实现
  • 文章生成器写出来的原创文章
  • 2023年全国最新高校辅导员精选真题及答案49
  • 【STL十】关联容器——set容器、multiset容器
  • 什么是Node.js
  • 比GPT-4 Office还炸裂,阿里版GPT全家桶来袭
  • mysql 建表约束
  • 在Vue项目中使用tinymce富文本编辑器
  • GPT-4 和ChatGPT API的定价分析