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

Day28 回溯算法part04 93. 复原IP地址 78. 子集 90. 子集 II

回溯算法part04 93. 复原IP地址 78. 子集 90. 子集 II

93. 复原 IP 地址

class Solution {
private:vector<string> result;bool isValid(string& s,int start,int end){if (start > end) return false;if (s[start] == '0' && start != end) { // 0开头的数字不合法 "0.1.2.201"特殊情况return false;}for (int i = start; i <= end; i++) {if (s[i] > '9' || s[i] < '0') { // 遇到非数字字符不合法return false;}}int num = stoll(s.substr(start,end-start+1)); //stoi会产生报错,out of rangeif(num>255) return false;return true;}
public:void backtracking(string& s,int startIndex,int pointSum){ //startIndex记录向下递归初始层,pointSum递归退出条件if(pointSum==3){if(isValid(s,startIndex,s.size()-1)) {result.push_back(s);return;}}for(int i = startIndex;i<s.size();i++){if(isValid(s,startIndex,i)){s.insert(s.begin()+i+1,'.');pointSum++;backtracking(s,i+2,pointSum);pointSum--;s.erase(s.begin()+i+1);}}}vector<string> restoreIpAddresses(string s) {if(s.size()>12||s.size()<4) return result; //剪枝backtracking(s,0,0);return result;}
};

78. 子集

class Solution {
private:vector<vector<int>> result;vector<int> path;
public:void backTracking(vector<int>& nums,int startIndex){result.push_back(path); // 收集子集,要放在终止添加的上面,否则会漏掉自己if(startIndex>=nums.size()) return; // 终止条件可以不加 forloop已经是退出循环条件了for(int i = startIndex;i<nums.size();i++){path.push_back(nums[i]);           backTracking(nums,i+1);path.pop_back();}}vector<vector<int>> subsets(vector<int>& nums) {backTracking(nums,0);return result;}
};

90. 子集 II

40.组合总和II+78. 子集,简单题叠加,直接上代码

class Solution {
private:vector<vector<int>> result;vector<int> path;
public:void backTracking(vector<int>& nums,int startIndex){result.push_back(path);for(int i = startIndex;i<nums.size();i++){if(i>startIndex&&nums[i]==nums[i-1]) continue;path.push_back(nums[i]);backTracking(nums,i+1);path.pop_back();}}vector<vector<int>> subsetsWithDup(vector<int>& nums) {sort(nums.begin(),nums.end());backTracking(nums,0);return result;}
};
http://www.lryc.cn/news/276276.html

相关文章:

  • Linux系统常用的安全优化
  • Vue-4、单向数据绑定与双向数据绑定
  • 【Flutter 开发实战】Dart 基础篇:常用运算符
  • C++:ifstream通过getline读取文件会忽略最后一行空行
  • 力扣123. 买卖股票的最佳时机 III
  • Vue3:vue-cli项目创建
  • C# .Net学习笔记—— 异步和多线程(Task)
  • Python从入门到网络爬虫(读写Excel详解)
  • Mysql之子查询、连接查询(内外)以及分页查询
  • 计算机的存储单位
  • 设备树文件中的设备节点
  • 文件管理工具.netcore资源文件管理
  • go-carbon v2.3.4 发布,轻量级、语义化、对开发者友好的 Golang 时间处理库
  • vue3 内置组件
  • MFC如何动态创建button按钮并添加点击事件
  • Qt - QML框架
  • Python+Flask+MySQL的图书馆管理系统【附源码,运行简单】
  • Module-Federation[微前端]
  • Spring 动态数据源事务处理
  • WSL2-Ubuntu22.04子系统图形化界面搭建与远程桌面连接
  • 【sklearn练习】model常用属性和功能
  • IO类day01
  • 软件测试大作业||测试计划+测试用例+性能用例+自动化用例+测试报告
  • 适用于任何公司的网络安全架构
  • Excel:通过excel将表数据批量转换成SQL语句
  • Android linphone-android sdk设置语音编码问题
  • Hyperledger Fabric Orderer 配置解析
  • 苹果电脑交互式原型设计软件Axure RP 9 mac特色介绍
  • Java 判断实体类对象的全部属性是否空
  • Vue3-44-Pinia- 安装步骤