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

leetcode做题笔记93. 复原 IP 地址

有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。

  • 例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 "0.011.255.245""192.168.1.312" 和 "192.168@1.1" 是 无效 IP 地址。

给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 '.' 来形成。你 不能 重新排序或删除 s 中的任何数字。你可以按 任何 顺序返回答案。

思路一:递归

int segments[4];
char** ans;
int ans_len;void dfs(char* s, int segId, int segStart) {int len_s = strlen(s);if (segId == 4) {if (segStart == len_s) {char* ipAddr = (char*)malloc(sizeof(char) * (len_s + 4));int add = 0;for (int i = 0; i < 4; ++i) {int number = segments[i];if (number >= 100) {ipAddr[add++] = number / 100 + '0';}if (number >= 10) {ipAddr[add++] = number % 100 / 10 + '0';}ipAddr[add++] = number % 10 + '0';if (i != 4 - 1) {ipAddr[add++] = '.';}}ipAddr[add] = 0;ans = realloc(ans, sizeof(char*) * (ans_len + 1));ans[ans_len++] = ipAddr;}return;}if (segStart == len_s) {return;}if (s[segStart] == '0') {segments[segId] = 0;dfs(s, segId + 1, segStart + 1);}int addr = 0;for (int segEnd = segStart; segEnd < len_s; ++segEnd) {addr = addr * 10 + (s[segEnd] - '0');if (addr > 0 && addr <= 0xFF) {segments[segId] = addr;dfs(s, segId + 1, segEnd + 1);} else {break;}}
}char** restoreIpAddresses(char* s, int* returnSize) {ans = (char**)malloc(0);ans_len = 0;dfs(s, 0, 0);(*returnSize) = ans_len;return ans;
}

分析:

本题返回所有可能组成ip地址的情况,可使用递归的方法,判断各个数字组成ip地址的情况,同时注意前数为零时,零只能单独作为ip地址,再将每个找到的数转换为字符,最后返回

总结:

本题考察递归的应用,将每个数可能组成地址的情况列举出来即可得到答案

http://www.lryc.cn/news/137179.html

相关文章:

  • HTTPS 中间人攻击
  • MATLAB打开excel读取写入操作例程
  • [C语言]分支与循环
  • 绘制区块链之链:解码去中心化、安全性和透明性的奇迹
  • 4G工业路由器的功能与选型!详解工作原理、关键参数、典型品牌
  • c与c++中struct的主要区别和c++中的struct与class的主要区别
  • mysql中char_length()和length()
  • Numpy学习笔记
  • LAMP配置与应用
  • Dockerfile搭建LNMP运行Wordpress平台
  • 数据库第十五课-------------非关系型数据库----------Redis
  • BM2 链表内指定区间反转,为什么链表要new一个结点?
  • SQL阶段性优化
  • 2023-08-22 Unity Shader 开发入门2 —— Shader 开发介绍
  • UE5 运行时捕捉外部窗口并嵌入到主窗口
  • uniapp 使用permission获取录音权限
  • 基于paddleocr的文档识别
  • 魏副业而战:闲鱼卖货赚钱策略
  • 语法篇--XML数据传输格式
  • 【Redis】缓存雪崩、缓存击穿、缓存穿透
  • 通过示例学习 JavaScript 运算符 - 逻辑、比较、三元和更多 JS 运算符
  • 基于微信小程序+Springboot校园二手商城系统设计和实现
  • excel 动态表头与合并列
  • jenkins自动部署微服务到docker
  • 【蔚来汽车】蔚来20220713第三题-旅游规划 <模拟、滑动窗口>
  • [解决方案]Antd TreeSelect/Select placeholder失效
  • 微人事 部门管理 模块 (十五)
  • 【Terraform学习】使用 Terraform 从 EC2 实例访问 S3 存储桶(Terraform-AWS最佳实战学习)
  • ZDRE6VP4-1X/50MG24K4V比例压力阀放大器
  • 纠缠辅助的量子网络:原理、技术、发展与挑战