代码随想录Day24_回溯_复原IP.md

news/2025/11/28 21:41:39/文章来源:https://www.cnblogs.com/ChenYinging/p/19283558

复原IP地址

题目理解

1.给出的是字符串,IP地址在【0,255】之间,字符串转数字;
2.0可以单独出现,但是不能跟数字出现;
3.字符串中要插入'.';
4.字符串的大小范围在4~12之间;
5.不能有除数字外的字母;

思路

首先确定答案类型:vector<string> res,一个用来存单个有效IP地址的字符串str;
1.函数返回值:void,函数参数,传进来的string s;
2.确定终止条件:插入4个'.'后;
3.单层回溯:
for循环遍历树的宽度:每次startIndex后移一位;
树的深度:每次.后移一位。后移两位。

问题

1.怎么在字符串中插入.? s.insert(pos,'neirong')
alt text
if(start>end){return false;}该条件是在处理空的字符串!很难想到这个边界条件。

class Solution {
public:vector<string> res;void backtrack(string& s, int startIndex, int pointNum) {if (pointNum == 3) {if (isValid(s, startIndex, s.size() - 1)) {res.push_back(s);}return;}for (int i = startIndex; i < s.size(); i++) {if (isValid(s, startIndex, i)) {s.insert(s.begin() + i + 1, '.');pointNum++;backtrack(s, i + 2, pointNum);s.erase(s.begin() + i + 1);pointNum--;} else {break;}}return;}bool isValid(const string& s, int start, int end) {if (start > end) {return false;} // 输入:s=101023     输出:10.102.3.if (s[start] == '0' && start != end) {return false;}int sum = 0;for (int i = start; i <= end; i++) {if (s[i] < '0' || s[i] > '9') {return false;}// 255逻辑sum = sum * 10 + (s[i] - '0');if (sum > 255) {return false;}}return true;}vector<string> restoreIpAddresses(string s) {backtrack(s, 0, 0);return res;}
};

求整数数组的所有子集

开始的时候在想每个整数数组都包含一个空的子集如何处理?写出来了但是不知道在哪里处理到了?

class Solution {
public:vector<int>path;vector<vector<int>>  res;void backtrack(vector<int>&nums, int startIndex){res.push_back(path);if(startIndex>=nums.size()){return;}for(int i=startIndex;i<nums.size();i++){path.push_back(nums[i]);backtrack(nums,i+1);path.pop_back();}}vector<vector<int>> subsets(vector<int>& nums) {res.clear();path.clear();backtrack(nums,0);return res;}
};

求存在重复元素的整数数组的子集

事情开始变得诡异起来了
让我再梳理一下事情的发生过程:
复用不存在重复元素的整数数组子集的代码;
其次,结果用set存下来,使用类型转换;
给path排序,发生了:
alt text
换给nums排序程序奇怪地运行起来了。
不懂。

class Solution {
public:vector<int>path;set<vector<int>>  res;void backtrack(vector<int>&nums, int startIndex){res.insert(path);if(startIndex>=nums.size()){return;}for(int i=startIndex;i<nums.size();i++){path.push_back(nums[i]);backtrack(nums,i+1);path.pop_back();//} }vector<vector<int>> subsetsWithDup(vector<int>& nums) {sort(nums.begin(),nums.end());backtrack(nums,0);return vector<vector<int>>(res.begin(),res.end());}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/980114.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

何以为生

何以为生何以为生人造的东西 价值不贵。 天然的才是资源。不能打断别人说话, 不急不躁。很想买入一支股票。。。

GraphRAG进阶:基于Neo4j与LlamaIndex的DRIFT搜索实现详解

微软的GraphRAG算得上是最早一批成熟的GraphRAG系统,它把索引阶段(抽取实体、关系、构建层级社区并生成摘要)和查询阶段的高级能力整合到了一起。这套方案的优势在于,可以借助预先计算好的实体、关系、社区摘要来回…

Gemini3疯了!0.09接入Nano Banana Pro 4k画质API(附实战教程)

2025年11月20日谷歌正式推出Nano Banana Pro(官方名称Gemini 3 Pro Image)时,Ai图像生成最强模型。这款基于Gemini 3 Pro foundation打造的新一代图像生成与编辑模型,不仅在图像质量上达到了全新高度,更在4K高清分…

11/28

今天没课,嘿嘿

noip板子

倍增法lca const int N = 500010; int n, m, s; vector<int> g[N]; void addeg(int u, int v) {g[u].push_back(v);g[v].push_back(u); }int d[N], anc[N][25]; void dfs(int u, int fa) {d[u] = d[fa] + 1;for …

东方博宜OJ 1119:求各位数字之和 ← 循环结构

​【题目来源】https://oj.czos.cn/p/1119【题目描述】输入一个正整数 N(0≤N≤2147483647),求它的各位数字之和。【输入格式】一行,一个正整数 N。【输出格式】一行,一个整数。【输入样例】189【输出样例】18【数…

2025.11.28

起床,吃饭,躺着,上网课,洗澡,买酸奶,吃饭,睡觉

10个免费查重降重工具分享,降AIGC率工具

在当前的学术环境中,确保论文的原创性和降低AI生成内容(AIGC)的检测率变得尤为重要。以下是一些能够有效降低论文AIGC率的工具,包括它们的功能、使用方法、效果以及用户评价。 SpeedAI 功能:SpeedAI专注于去除文档…

Linux_Socket_浅谈UDP - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Jetlinks 物联网平台 开源版学习源码分析

2022-06-25 Jetlinks Jetlinks 是一个非常优秀物联网基础平台, 还支持开源二次开发, 且他们的开发团队还非常友好的, 即使你使用的是开源的版本还挺愿意帮你解决问题 (当然我司也购买了企业版, 但不能分享学习笔记) 文…

多项式次数选择完整演示

多项式次数选择完整演示(Python) 本文将通过 人工生成数据→数据划分→多次数模型训练→验证集筛选最优次数→测试集评估 的全流程,演示多项式回归中如何通过验证集选择最优次数,所有代码逐行解释,兼顾理论与实践…

Java 线程池深度解析:原理、策略与生产环境调优指南

在现代 Java 应用中,线程池已成为并发处理的核心基础设施。无论是 Web 服务、定时任务、RPC 框架还是大数据处理,线程池都扮演着至关重要的角色。正确理解线程池的工作机制与调优方法,将直接影响系统的吞吐、延迟与…

Tita CRM一体化平台:破解销售管理五大痛点,实现业绩可持续增长

在数字化转型浪潮中,销售管理正成为企业高质量发展的关键瓶颈。目标执行不到位、客户资源流失、团队协同低效、项目交付延期、绩效考核失真——这些痛点的背后,是企业销售管理体系的系统性缺失。Tita CRM以”销售+交…

NOIP 算法合集

Ⅰ​.数据结构 1.树状数组 时间复杂度:\(O(n\log n)\) 优点:常数小 缺点:可以维护的内容不如线段树 应用:小常数维护前缀和或单点值 int tr[200005]; void add(int x,int y){while(x<=n)tr[x]+=y,x+=(-x)&x…

会赢吗

会赢吗会赢吗会赢吗会赢吗会赢吗会赢吗会赢吗会赢吗会赢吗会赢吗会赢吗会赢吗会赢吗会赢吗会赢吗会赢吗会赢吗会赢吗会赢吗会赢吗会赢吗会赢吗会赢吗会赢吗会赢吗会赢吗会赢吗会赢吗会赢吗会赢吗会赢吗会赢吗会赢吗会赢…

直接通过electron创建项目

直接通过electron创建项目一、创建原始electron实例demo1 1、创建项目目录demo1 2、通过命令初始化项目配置文件package.json 命令:npm init -y 项目目录下生成packabe.json文件 {"name": "demo1"…

东方博宜OJ 1246:请输出n行的9*9乘法表 ← 嵌套循环

​【题目来源】https://oj.czos.cn/p/1246【题目描述】请从键盘读入一个整数 n,代表有 n 行,输出 n 行的 9*9 乘法表。比如,假设 n=5,则输出如下: 1*1=12*1=2 2*2=43*1=3 3*2=6 3*3=94*1=4 4*2=8 4*3=12 4*4=165*…

使用cnpm(中国镜像源的npm客户端)来安装electron

使用cnpm(中国镜像源的npm客户端)来安装electron要使用cnpm(中国镜像源的npm客户端)来安装electron,你需要先确保已经安装了cnpm。如果你还没有安装cnpm,你可以通过npm来安装它。以下是具体步骤:1. 安装 cnpm 首…

2025年11月电动叉车销售企业避坑指南:市场主流品牌横向对比

在制造业转型升级和绿色物流政策推动下,电动叉车市场需求持续增长。根据中国工程机械工业协会数据,2025年前三季度电动叉车销量同比增长18%,占叉车总销量比例突破65%。许多企业管理者在选购电动叉车时面临诸多考量,…