news 2026/6/15 17:14:00

1.6 - 复制IP地址 vector和list的区别

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
1.6 - 复制IP地址 vector和list的区别

目录

1.复制IP地址

a.核心思想

b.思路

c.步骤

2.list和vector的区别


1.复制IP地址

93. 复原 IP 地址 - 力扣(LeetCode)https://leetcode.cn/problems/restore-ip-addresses/description/

class Solution { public: vector<string> restoreIpAddresses(string s) { vector<string> result; // 存储结果集 // 输入有效性检查:IP地址最多由12个数字组成 if (s.size() > 12) return result; string path; // 当前路径(存储临时IP地址段) backtrack(s, 0, 0, path, result); // 从第0个字符开始回溯 return result; } void backtrack(string& s, int start, int segment, string& path, vector<string>& result) { // 成功条件:生成4段且用完所有字符 if (start == s.size() && segment == 4) { path.pop_back(); // 移除末尾多余的点(如"192.168.1.1."→"192.168.1.1") result.push_back(path); return; } // 失败条件:越界或已生成4段 if (start >= s.size() || segment >= 4) return; // 尝试当前段的3种可能长度(1-3位) for (int len = 1; len <= 3; len++) { // 防止越界检查 if (start + len > s.size()) break; string sub = s.substr(start, len); // 截取当前段 // 有效性检查: // 1. 长度>1时不能以0开头(排除"01"类无效地址) // 2. 数值范围必须在0-255之间 if ((sub.size() > 1 && sub[0] == '0') || stoi(sub) > 255) break; // 生成新路径(避免修改原始path) string newPath = path + sub + "."; // 递归:处理下一段(位置后移len,段数+1) backtrack(s, start + len, segment + 1, newPath, result); // 注意:newPath是局部变量,递归返回后自动销毁 // 无需手动恢复path状态 } } };

a.核心思想

通过回溯法,在给定的数字字符串中插入三个点,将字符串分成四部分,判断每部分是否满足有效IP地址的条件,若满足则将其加入结果列表。

b.思路

① 使用回溯法遍历所有可能的插入点的位置。

② 对于每一种分割方式,检查四部分是否都满足有效IP地址的条件(整数在0到255之间,且不能有前导0,除非整数就是0)。

③ 如果满足条件,则将该IP地址加入结果列表。

c.步骤

① 定义回溯函数,参数包括当前字符串、当前分割的段数、当前路径和结果列表。

② 在回溯函数中,如果已经分割成四段且字符串已用完,则将当前路径加入结果列表。

③ 遍历所有可能的分割点,对每一段进行检查,如果满足条件则继续回溯。

④ 返回结果列表。

2.list和vector的区别

vector

list

底层数据结构

动态数组,连续内存存储,支持随机访问

双向链表,非连续内存存储,节点分散在内存中

访问效率

  1. 支持O(1)随机访问(通过下标[]at()

  2. 遍历速度快,缓存友好(内存连续)

  1. 不支持随机访问,必须从头/尾开始遍历(O(n)

  2. 访问任意元素较慢

插入/删除效率

  1. 尾部插入/删除O(1)(均摊)

  2. 中间或头部插入/删除O(n)(需要移动后续元素)

  1. 任意位置插入/删除O(1)(只需修改指针)

  2. 适合频繁插入/删除的场景

内存使用

  1. 内存连续,预分配容量(capacity),可能浪费内存

  2. 扩容时需重新分配内存并复制元素(代价高)

  1. 每个节点独立分配内存,无预分配

  2. 内存开销更大(每个节点存储前后指针)

适用场景

  1. 需要随机访问或尾部操作

  2. 数据量可预测,减少扩容开销

  1. 频繁插入/删除,且不关心随机访问

  2. 数据量变化大,避免vector扩容开销

希望这些内容对大家有所帮助!

感谢大家的三连支持!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 11:06:10

AI 3D建模终极指南:零基础快速上手Meshroom

AI 3D建模终极指南&#xff1a;零基础快速上手Meshroom 【免费下载链接】Meshroom 3D Reconstruction Software 项目地址: https://gitcode.com/gh_mirrors/me/Meshroom 还在为复杂的3D建模软件头疼吗&#xff1f;别担心&#xff0c;今天我要带你体验一个神奇的AI工具—…

作者头像 李华
网站建设 2026/6/15 11:04:02

Unity游戏资源逆向工程与素材提取全攻略

Unity游戏资源逆向工程与素材提取全攻略 【免费下载链接】AssetStudio 项目地址: https://gitcode.com/gh_mirrors/asse/AssetStudio Unity游戏资源逆向工程是现代游戏开发者和素材创作者必备的重要技能。通过专业的工具链&#xff0c;我们可以深入解析Unity游戏的内部…

作者头像 李华
网站建设 2026/6/15 11:04:15

星露谷物语Mod制作终极指南:5分钟掌握XNB文件解压技巧

星露谷物语Mod制作终极指南&#xff1a;5分钟掌握XNB文件解压技巧 【免费下载链接】StardewXnbHack A simple one-way XNB unpacker for Stardew Valley. 项目地址: https://gitcode.com/gh_mirrors/st/StardewXnbHack 创意受阻的真相&#xff1a;为什么你的Mod想法难以…

作者头像 李华
网站建设 2026/6/15 11:04:22

OFD转PDF终极指南:告别格式困扰,5分钟掌握高效转换技巧

OFD转PDF终极指南&#xff1a;告别格式困扰&#xff0c;5分钟掌握高效转换技巧 【免费下载链接】Ofd2Pdf Convert OFD files to PDF files. 项目地址: https://gitcode.com/gh_mirrors/ofd/Ofd2Pdf 还在为OFD文档无法直接打印或分享而烦恼吗&#xff1f;OFD转PDF工具的出…

作者头像 李华
网站建设 2026/6/15 11:03:33

QModMaster:专业ModBus工业自动化通信实战指南

QModMaster&#xff1a;专业ModBus工业自动化通信实战指南 【免费下载链接】qModbusMaster 项目地址: https://gitcode.com/gh_mirrors/qm/qModbusMaster 在工业自动化系统的核心架构中&#xff0c;稳定可靠的设备通信是确保生产流程顺畅运行的关键环节。QModMaster作为…

作者头像 李华
网站建设 2026/6/15 13:55:44

FFmpegGUI终极指南:3步完成视频转码、格式转换和GIF制作

FFmpegGUI终极指南&#xff1a;3步完成视频转码、格式转换和GIF制作 【免费下载链接】ffmpegGUI ffmpeg GUI 项目地址: https://gitcode.com/gh_mirrors/ff/ffmpegGUI 在当今数字时代&#xff0c;视频处理已成为日常需求&#xff0c;但复杂的命令行工具让普通用户望而却…

作者头像 李华