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

代码训练营 Day24 | 93.复原IP地址 |78.子集

93.复原IP地址

1. 怎么模拟切割线,如何固定切割线

   1. startindex就是我们分割线,它控制着下一层递归里面从哪里开始

   2. 从那里开始分割线就在那里

2. 如何去判断子串

伪代码

``` c++ 
vector<string>result;// 递归函数的参数和返回值
void backtracking(s,startindex,pointSum){// 递归终止条件,ip地址一共有三个点,如果已经有三个点了说明已经完成了可以返回答案if(pointSum == 3){// 对ip地址最后一段进行合法判断,isvalid传递的区间是[]左闭右闭区间if(isvalid(s,startindex,s.size()-1)){// 合法的添加到数组result.push_back(s);}return;}// 单层搜索逻辑for(i=startindex,i<s.size(); i++){// 检查切割的子串,是否合法; [startindex,i]是切割的子串if(isvalid(s,startindex,s.size())){s.insert(s.begin()+i+1,'.')// 点的数量加1pointSum += 1;// 递归; 这里是i+2是因为有个点,所以想要找到下一个区间开始的字母要+2backtracking(s,i+2,pointSum)// 回溯s.erase(s.begin()+i+1);pointSum -= 1;}}
}

运行代码

class Solution(object):def isvalid(self,s,start,end):# is invalid intervalif start > end:return False# make sure first number is not zeroif s[start] == '0' and start != end:# if there is only one 0, it's ok; but more than one number is ilegalreturn False        num = 0for i in range(start,end+1):# if it's not number if not s[i].isdigit():return False# every time num *10, to make to 255num = num * 10 + int(s[i])# make sure our number is less than 255if num > 255:return False# otherwise return Truereturn Truedef backtracking(self,s,startindex,current,pointSum,result):# recursion stop conditionif pointSum == 3:# make sure our string is validif self.isvalid(s,startindex,len(s)-1):# add our final ip address to currentcurrent += s[startindex:]# append to final result setresult.append(current)return# recursion logic for each levelfor i in range(startindex,len(s)):# check the string is validif self.isvalid(s,startindex,i):sub = s[startindex:i+1]# recursionself.backtracking(s,i+1,current+sub+'.',pointSum+1,result)else:breakdef restoreIpAddresses(self, s):""":type s: str:rtype: List[str]"""result = []self.backtracking(s,0,"",0,result)return result

78.子集

1. 这题并不是到叶子节点收获结果

2.  因为是组合[1,2]和[2,1]是一样的

3.  在子集问题里面每个节点里面就是我们要收集的结果

class Solution(object):def backtracking(self,nums,strartindex,path,result):# collect our result setresult.append(path[:])# recursion end conditionif strartindex >= len(nums):# we finished all the saerchreturn# recursion for each levelfor i in range(strartindex,len(nums)):# add our number into arraypath.append(nums[i])# recursionself.backtracking(nums,i+1,path,result)# backtrackingpath.pop()def subsets(self, nums):""":type nums: List[int]:rtype: List[List[int]]"""result = []self.backtracking(nums,0,[],result)return result


http://www.mrgr.cn/news/20847.html

相关文章:

  • 量化交易策略:中国市场的Carhart四因子模型python代码解析
  • 大牛直播SDK的RTSP直播播放器怎么样?
  • 【C题论文】2024数学建模国赛C题38页成品+配套所有小问代码+高清可视化结果图
  • 【日记】往哈尔滨西天取经、弱电工程师与软考证书(2113 字)
  • 【IEEE出版,IEEE Xplore等多数据库检索】第五届智能设计国际会议(ICID 2024,10月25-27)
  • VisualStudio环境搭建C++
  • Patlibc———更快捷的更换libc
  • 2024 年高教社杯全国大学生数学建模竞赛B题—生产过程中的决策问题(讲解+代码+成品论文助攻)
  • FreeRTOS学习笔记(一)初认RTOS
  • 如何使用GPT-4o
  • 【PyCharm安装】2024最新安装、激活Python+PyCharm教程。附带激活码、Python安装包、PyCharm安装包、激活码!!!
  • 【RAG】LongRAG:利用长上下文LLMs增强检索增强生成
  • shell脚本编程(正则表达式与grep +awk+sed+expect详解)
  • 力扣416-分割等和子集(Java详细题解)
  • java代码审计-ofCMS
  • Java程序打jar包(包含作者各种踩坑案例,力求为大家避雷)
  • PLC协议转换网关:巨控NET400
  • Java8 Stream流的基本使用
  • 关于linux下编译so动态库及加载提示找不到文件路径的问题
  • RS485差分信号不对称