力扣--动态规划/深度优先算法/回溯算法93.复原IP地址

这题主要用了动态规划和回溯算法。

  1. 动态规划数组初始化(DP数组):

    • 首先,创建一个二维数组dp,用于记录字符串中哪些部分是合法的IP地址。
    • 对字符串进行遍历,同时考虑每个可能的IP地址部分(每部分由1到3个字符组成,对应0-255),并根据IPv4地址的规则进行判断,更新dp数组。
  2. 深度优先搜索(DFS):

    • 定义DFS函数,用于递归生成合法的IPv4地址。该函数采用回溯法,遍历每一部分可能的范围,将符合条件的部分添加到当前路径中。
    • 如果已经形成四个部分且遍历到字符串末尾,将路径转为字符串,并加入结果集。
    • 否则,继续递归生成下一部分。
    • 在生成下一部分之前,将路径中的当前部分标记为一个点号('.'),以区分IPv4地址的各个部分。
  3. 返回结果:

    • 在主函数restoreIpAddresses中,首先初始化dp数组,然后调用DFS函数,开始生成合法的IPv4地址。
    • 最后,返回生成的IPv4地址结果集。
class Solution {vector<string> result;  // 存储结果的容器vector<char> path;      // 存储当前路径的容器// 深度优先搜索函数,用于生成合法的IPv4地址void dfs(vector<vector<bool>>& dp, string s, int start, int num) {num++;if (num >= 5)  // 如果已经有四个部分了,结束递归return;// 遍历当前部分的可能范围for (int i = start; i - start <= 2 && i < s.size(); i++) {if (dp[start][i] == true) {// 将当前部分加入路径for (int j = start; j <= i; j++)path.push_back(s[j]);// 如果已经是最后一部分且遍历到字符串末尾,将路径转为字符串加入结果集if (i == s.size() - 1 && num == 4) {string str;str.assign(path.begin(), path.end());result.push_back(str);}// 否则,继续递归生成下一部分else {path.push_back('.');dfs(dp, s, i + 1, num);path.pop_back();}// 回溯,将当前部分从路径中移除for (int j = start; j <= i; j++)path.pop_back();}}return;}public:// 主函数,生成合法IPv4地址的入口vector<string> restoreIpAddresses(string s) {int n = s.size();// dp数组用于记录字符串中哪些部分是合法的vector<vector<bool>> dp(n, vector<bool>(n, false));// 遍历字符串,初始化dp数组for (int i = 0; i < n; i++) {for (int j = i; j <= i + 2 && j < n; j++) {if (i == j)dp[i][j] = true;else if (i == j - 1) {if (s[i] == '0')dp[i][j] = false;elsedp[i][j] = true;} else {if (s[i] == '0' || s[i] >= '3')dp[i][j] = false;else if (s[i] == '1')dp[i][j] = true;else {if (s[i + 1] <= '4' || (s[i + 1] == '5' && s[j] <= '5'))dp[i][j] = true;}}}}// 调用深度优先搜索函数,开始生成合法IPv4地址dfs(dp, s, 0, 0);// 返回最终结果return result;}
};

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

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

相关文章

共同聚焦空气污染治理,打造可持续发展未来|中联环保圈

在2024年全国生态环境保护工作会议上&#xff0c;我国生态环境部明确提出&#xff0c;“加强重点区域空气质量改善的监督帮扶和统筹强化监督”将成为未来生态环境保护工作的重中之重。这一战略方向的转变&#xff0c;清晰地展现了我国在空气污染治理政策上的优化和深化。 回顾2…

antd vue Tabs控件的使用

Ant Design Vue-------Tabs标签页 今天就讲讲Ant Design Vue下的控件----tabs 标签页 结合项目中的需求&#xff0c;讲一下该控件如何使用&#xff0c;需求&#xff1a; &#xff08;1&#xff09;竖排样式 &#xff08;2&#xff09;如何使用v-for绑定数据源 &#xff08;3…

当HR问你为什么申请这个职业,你该怎么回答?【文章底部添加进大学生就业交流群】

目录 强调对公司的了解&#xff1a; 突出你的技能和经验&#xff1a; 表达对行业的热情&#xff1a; 谈论个人发展&#xff1a; 对公司的价值观的契合&#xff1a; 当HR问你为什么申请这个职业时&#xff0c;你可以通过以下方式回答&#xff1a; 强调对公司的了解&#xf…

物联网导论

物联网起源 物联网&#xff1a;是一个基于互联网、传统电信网等信息承载体&#xff0c;让所有能够被独立寻址的普通物理对象实现互联互通的网络。它具有普通对象设备化、自治终端互联化和普适服务智能化三个重要特征。 按照规定的协议&#xff0c;将具有感知、通信、计算等功…

Linux入门基本指令(1)

✨前言✨ &#x1f4d8; 博客主页&#xff1a;to Keep博客主页 &#x1f646;欢迎关注&#xff0c;&#x1f44d;点赞&#xff0c;&#x1f4dd;留言评论 ⏳首发时间&#xff1a;2024年3月12日 &#x1f4e8; 博主码云地址&#xff1a;渣渣C &#x1f4d5;参考书籍&#xff1a;…

【Python】新手入门学习:什么是工作目录?

【Python】新手入门学习&#xff1a;什么是工作目录&#xff1f; &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希望得…

L2-006 树的遍历(Java)

给定一棵二叉树的后序遍历和中序遍历&#xff0c;请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。 输入格式&#xff1a; 输入第一行给出一个正整数N&#xff08;≤30&#xff09;&#xff0c;是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中…

使用OCC进行阵列操作

OCC中实现阵列操作&#xff0c;本质上计算出物体的位置&#xff0c;然后进行位置变换&#xff0c;复制出一个新的物体的过程&#xff0c;下列用直线的阵列和环形的阵列作为例子&#xff1a; 直线阵列&#xff1a;以一个在z轴正方向的直线向y轴方向阵列2个距离为5的对象 #inclu…

hcia datacom课程学习(2):telnet与ssh

telnetssh所属层应用层应用层所应用的传输层协议tcptcp功能远程连接远程连接默认端口2322安全性很低较高功能组件分布客户端、服务器端客户端、服务器端linux环境不自带自带windows环境 win7有客户端和服务器端&#xff0c;但需要手动打开。 win10只有客户端&#xff0c;也需要…

基于STM32G031LORA开发板的时间同步项目

一、前言 本项目采用淘宝购买的STM32G031开发板&#xff0c;板上预留了oled和LORA模块的IO&#xff0c;一次性买了四套&#xff0c;资料虽然质量不高&#xff0c;但是覆盖面挺广&#xff0c;有一定的学习价值。 实验目的是需要三个从机实现时间轴的一致&#xff0c;考虑到现有环…

鸿蒙原生应用元服务开发-WebGL网页图形库开发接口说明

一、场景介绍 WebGL主要帮助开发者在前端开发中完成图形图像的相关处理&#xff0c;比如绘制彩色图形等。目前该功能仅支持使用兼容JS的类Web开发范式开发。 二、接口说明 表1 WebGL主要接口列表 本文参考引用HarmonyOS官方开发文档&#xff0c;基于API9。

期货开户市场的风险在哪里?

期货市场的风险在哪里&#xff1f;强平和穿仓是什么&#xff1f; 期货市场是一个自带杠杆的市场&#xff0c;简单理解就是我们只需要用10W就能买到价值100万的商品。期货主要的风险来源于仓位风险和交割风险&#xff0c;仓位风险就是我们是采用满仓还是轻仓方式交易。比如我们…

32个关键字详解①(C语言)

目录 关键字分类&#xff1a; 第一个C程序 - 补充内容 变量的定义与声明 - 补充内容 变量的分类 - 补充内容 变量的作用域 - 补充内容 变量的生命周期 - 补充内容 auto 关键字 register 关键字 static 关键字 static 修饰变量&#xff1a; static修饰函数 sizeof 关键字 基本数…

docker私有仓库-harbor的搭建

docker 官方提供的私有仓库 registry&#xff0c;用起来虽然简单 &#xff0c;但在管理的功能上存在不足。 Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器&#xff0c;harbor使用的是官方的docker registry(v2命名是distribution)服务去完成。harbor在docker di…

全排列+力扣

题目 题目链接 . - 力扣&#xff08;LeetCode&#xff09; 题目描述 代码实现 class Solution {vector<vector<int>> ret;vector<int> path;bool used[7]; public:vector<vector<int>> permute(vector<int>& nums) {_permute(nums…

C++_包装器

目录 1、包装器的用法 2、包装器的类型 3、包装器的作用 4、包装成员函数 5、bind&#xff08;绑定&#xff09; 5.1 bind的用法 5.2 bind减少参数个数 结语 前言&#xff1a; C11的包装器&#xff0c;总称为function包装器&#xff0c;而包装器又称适配器…

allegro PCB设计心得笔记(二) -- ERROR(SPMHUT-144): Illegal arc specification

使用Allegro PCB Editor设计PCB&#xff0c;其中使用了中文丝印&#xff0c;设计完成后&#xff0c;进行Tools -> Database Check&#xff0c;提示如下错误&#xff1a; 对PCB文件进行反复检查&#xff0c;也没有找到具体问题&#xff0c;但是删除中文丝印封装后&#xff0c…

vue3 uniapp 项目初始化集成配置【开箱即用】

https://gitee.com/charrie/vue3-uniapp-init 技术说明 采用vue3viteuniapp技术栈&#xff0c;setup语法糖编码方式引入unocss量子化样式引擎&#xff0c;动态css不用自己写样式&#xff0c;引用class即可&#xff0c;降低代码体积全局请求入口已封装&#xff0c;使用时自己封…

宝塔面板配置网站通过ip地址+端口,页面刷新无效。nginx反向代理后端端口。添加/xxx文件然后再访问项目。

宝塔面板配置网站通过ip地址端口&#xff0c;页面刷新无效。nginx反向代理后端端口。添加/xxx文件然后再访问项目。 一般来说vue项目build打包以后 如果 直接发布服务器 并且不使用后端接口。 是不需要配置nginx的。 假设我vue部署好了。我的ip是106.66.66.66. 但是我页面里面…

PLC数据采集网关是如何应用的?-天拓四方

PLC数据采集网关通过以太网、串口等通信接口与PLC设备连接&#xff0c;实现数据的实时采集。网关内置数据处理模块&#xff0c;可以对采集到的数据进行清洗、转换和存储&#xff0c;以满足不同应用场景的需求。同时&#xff0c;PLC数据采集网关支持多种通信协议&#xff0c;如M…