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

设计相关的网站公司网站建设哪家公司好

设计相关的网站,公司网站建设哪家公司好,山西网站开发建设,wordpress查看ftp服务器将数字字符串转化为IP地址 题目描述解题思路回溯法步骤分解 代码实现全局变量有效性验证函数回溯函数主函数完整代码 复杂度分析关键点说明总结 这题难度还挺大的,整体上实现并不容易。建议参考视频 和https://programmercarl.com/0093.%E5%A4%8D%E5%8E%9FIP%E5%9C%…

将数字字符串转化为IP地址

    • 题目描述
    • 解题思路
      • 回溯法
      • 步骤分解
    • 代码实现
      • 全局变量
      • 有效性验证函数
      • 回溯函数
      • 主函数
      • 完整代码
    • 复杂度分析
    • 关键点说明
    • 总结

这题难度还挺大的,整体上实现并不容易。建议参考视频
和https://programmercarl.com/0093.%E5%A4%8D%E5%8E%9FIP%E5%9C%B0%E5%9D%80.html#%E6%80%9D%E8%B7%AF

题目描述

给定一个仅包含数字的字符串,将其转换为所有可能的有效IP地址形式。有效的IP地址由四个整数(0到255之间)构成,各部分用.分隔,且不能有前导零(除非该段本身为0)。

示例

  • 输入:"25525522135"
    输出:["255.255.22.135", "255.255.221.35"]

  • 输入:"000256"
    输出:[](因256超过255)

解题思路

回溯法

  1. 分割逻辑:IP地址由四段组成,需在字符串中找到三个分割点将字符串分为四段。
  2. 有效性检查:每段必须满足:
    • 值在0255之间;
    • 无前导零(除非段本身为0);
    • 仅包含数字。
  3. 递归终止条件:当分割点数量为3时,检查最后一段是否有效。
  4. 剪枝:若当前分割无效,跳过后续尝试。

步骤分解

  1. 回溯函数:记录当前分割点位置和已分割段数。
  2. 有效性验证:检查子串是否合法。
  3. 生成结果:将合法分割组合成IP地址格式。
    在这里插入图片描述

代码实现

全局变量

char** result;      // 存储结果数组
int resultTop;       // 结果数组当前索引
int segments[3];     // 记录三个分割点的位置

有效性验证函数

int isValid(char* s, int start, int end) {if (start > end) return 0;if (s[start] == '0' && start != end) return 0; // 前导零无效int num = 0;for (int i = start; i <= end; i++) {if (s[i] < '0' || s[i] > '9') return 0;   // 非数字字符num = num * 10 + (s[i] - '0');if (num > 255) return 0;                  // 超过255}return 1;
}

回溯函数

void backTracking(char* s, int startIndex, int pointNum) {if (pointNum == 3) { // 分割点已满3个// 检查最后一段是否有效if (isValid(s, startIndex, strlen(s) - 1)) {char* temp = (char*)malloc(strlen(s) + 4); // 分配新字符串内存int count = 0, count1 = 0;for (int j = 0; j < strlen(s); j++) {temp[count++] = s[j];// 在分割点后插入'.'if (count1 < 3 && j == segments[count1]) {temp[count++] = '.';count1++;}}temp[count] = '\0';// 扩展结果数组并保存result = (char**)realloc(result, sizeof(char*) * (resultTop + 1));result[resultTop++] = temp;}return;}for (int i = startIndex; i < strlen(s); i++) {if (isValid(s, startIndex, i)) { // 当前分割有效segments[pointNum] = i;      // 记录分割点backTracking(s, i + 1, pointNum + 1); // 递归下一段} else break; // 无效分割,剪枝}
}

主函数

char** restoreIpAddresses(char* s, int* returnSize) {result = (char**)malloc(0);resultTop = 0;backTracking(s, 0, 0);*returnSize = resultTop;return result;
}

完整代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>char** result;  // 用于存储所有可能的IP地址
int resultTop;  // 当前result数组中的IP地址数量
// 记录应该加入'.'的位置,数组大小为3,因为IP地址有3个分隔点
int segments[3];// 检查字符串是否为合法的IP段
// start和end分别表示当前检查的子字符串的起始和结束位置
int isValid(char* s, int start, int end) {// 如果起始位置大于结束位置,说明子字符串无效if (start > end) {return 0;}// 如果子字符串以0开头且长度大于1,则该子字符串无效(例如01、001等)if (s[start] == '0' && start != end) {return false;}int num = 0;  // 用于存储子字符串转换后的数字值// 遍历子字符串,检查是否为合法数字for (int i = start; i <= end; i++) {// 如果字符不是数字,则子字符串无效if (s[i] > '9' || s[i] < '0') {return false;}num = num * 10 + (s[i] - '0');  // 将字符转换为数字并累加// 如果数字大于255,则子字符串无效if (num > 255) {return false;}}return true;  // 如果通过所有检查,则子字符串有效
}// 回溯函数,用于生成所有可能的IP地址
// startIndex表示当前处理的字符串起始位置,pointNum表示当前已放置的'.'数量
void backTracking(char* s, int startIndex, int pointNum) {// 如果已放置3个'.',说明已经生成了一个完整的IP地址if (pointNum == 3) {// 检查最后一段字符串是否合法if (isValid(s, startIndex, strlen(s) - 1)) {// 为存储当前IP地址分配内存char* tempString = (char*)malloc(sizeof(char) * (strlen(s) + 4));int count = 0;  // 用于记录tempString的当前索引int count1 = 0; // 用于记录已使用的'.'数量// 遍历字符串,根据segments数组插入'.'生成IP地址for (int j = 0; j < strlen(s); j++) {tempString[count++] = s[j];  // 将当前字符添加到tempString// 如果当前索引是'.'的位置,则插入'.'(最多插入3个)if (count1 < 3 && j == segments[count1]) {tempString[count++] = '.';count1++;}}tempString[count] = '\0';  // 添加字符串结束符// 扩容result数组以存储新的IP地址result = (char**)realloc(result, sizeof(char*) * (resultTop + 1));result[resultTop++] = tempString;  // 将新生成的IP地址加入result}return;}// 遍历字符串,尝试将当前子字符串作为IP地址的一部分for (int i = startIndex; i < strlen(s); i++) {// 检查当前子字符串是否合法if (isValid(s, startIndex, i)) {// 记录当前'.'的位置segments[pointNum] = i;// 递归处理下一段字符串backTracking(s, i + 1, pointNum + 1);} else {// 如果当前子字符串不合法,则停止当前分支的搜索break;}}
}// 主函数,用于恢复IP地址
char** restoreIpAddresses(char* s, int* returnSize) {// 初始化result数组result = (char**)malloc(0);resultTop = 0;// 开始回溯搜索backTracking(s, 0, 0);*returnSize = resultTop;  // 设置返回的IP地址数量return result;
}

复杂度分析

  • 时间复杂度:O(n!),回溯尝试所有可能分割方式。
  • 空间复杂度:O(n!),存储所有可能的IP地址。

关键点说明

  1. 回溯终止条件:当分割点数为3时,验证最后一段。
  2. 剪枝优化:遇到无效分割时立即终止当前循环。
  3. 动态内存管理:结果字符串需动态分配,并适时扩展结果数组。

总结

通过回溯法遍历所有可能的分割方式,结合有效性剪枝,可高效生成所有合法IP地址。注意处理边界条件(如前导零、数值范围)和内存管理,确保程序健壮性。


文章转载自:
http://dinncoshoshonian.zfyr.cn
http://dinncogressorial.zfyr.cn
http://dinncozonate.zfyr.cn
http://dinncomcmlxxvi.zfyr.cn
http://dinncosubuliform.zfyr.cn
http://dinncolvn.zfyr.cn
http://dinncoaffliction.zfyr.cn
http://dinncosonority.zfyr.cn
http://dinncohashing.zfyr.cn
http://dinncopolydrug.zfyr.cn
http://dinncodemimonde.zfyr.cn
http://dinncochrism.zfyr.cn
http://dinncomonaural.zfyr.cn
http://dinncoshelleyan.zfyr.cn
http://dinncooctonary.zfyr.cn
http://dinncodildo.zfyr.cn
http://dinncoindocility.zfyr.cn
http://dinncojumbo.zfyr.cn
http://dinncokonfyt.zfyr.cn
http://dinncoencyclopedism.zfyr.cn
http://dinncopatagonian.zfyr.cn
http://dinncogemman.zfyr.cn
http://dinncoimperence.zfyr.cn
http://dinncoatrium.zfyr.cn
http://dinncosolemnness.zfyr.cn
http://dinncooverearnest.zfyr.cn
http://dinncoautocross.zfyr.cn
http://dinncoflyway.zfyr.cn
http://dinncoprovoke.zfyr.cn
http://dinncostark.zfyr.cn
http://dinncorefrigeratory.zfyr.cn
http://dinncoprostatotomy.zfyr.cn
http://dinncopreconscious.zfyr.cn
http://dinncotafelwein.zfyr.cn
http://dinncolandrace.zfyr.cn
http://dinncoflair.zfyr.cn
http://dinnconoir.zfyr.cn
http://dinnconucellus.zfyr.cn
http://dinncobrian.zfyr.cn
http://dinncohyrax.zfyr.cn
http://dinncocedilla.zfyr.cn
http://dinnconeurular.zfyr.cn
http://dinncofrankforter.zfyr.cn
http://dinncoorebody.zfyr.cn
http://dinncopecksniff.zfyr.cn
http://dinncokatydid.zfyr.cn
http://dinncomerchandizer.zfyr.cn
http://dinncovehicular.zfyr.cn
http://dinncoejaculate.zfyr.cn
http://dinncobetweenmaid.zfyr.cn
http://dinncochokedamp.zfyr.cn
http://dinncocomplementizer.zfyr.cn
http://dinncorainily.zfyr.cn
http://dinncorajahship.zfyr.cn
http://dinncoviomycin.zfyr.cn
http://dinncodatura.zfyr.cn
http://dinncobefit.zfyr.cn
http://dinncopelican.zfyr.cn
http://dinncomalacca.zfyr.cn
http://dinncomandora.zfyr.cn
http://dinncodagwood.zfyr.cn
http://dinncoguestship.zfyr.cn
http://dinncochromic.zfyr.cn
http://dinncoinstil.zfyr.cn
http://dinncoamontillado.zfyr.cn
http://dinncowarrantor.zfyr.cn
http://dinncoemit.zfyr.cn
http://dinncogyroscopic.zfyr.cn
http://dinncounsuspecting.zfyr.cn
http://dinncospiroplasma.zfyr.cn
http://dinncocotswolds.zfyr.cn
http://dinncotricot.zfyr.cn
http://dinncounarmoured.zfyr.cn
http://dinncothesis.zfyr.cn
http://dinncostereotyped.zfyr.cn
http://dinncowort.zfyr.cn
http://dinncountame.zfyr.cn
http://dinncoguardsman.zfyr.cn
http://dinncopellitory.zfyr.cn
http://dinncoallodial.zfyr.cn
http://dinncocoffie.zfyr.cn
http://dinncoaphorize.zfyr.cn
http://dinncobryozoan.zfyr.cn
http://dinncoapostrophe.zfyr.cn
http://dinncotroilite.zfyr.cn
http://dinncophylloxerated.zfyr.cn
http://dinncoexquay.zfyr.cn
http://dinncomosasaur.zfyr.cn
http://dinncobef.zfyr.cn
http://dinncohypermnesis.zfyr.cn
http://dinncoirrepressibility.zfyr.cn
http://dinncodragoon.zfyr.cn
http://dinncoblessed.zfyr.cn
http://dinncopoppethead.zfyr.cn
http://dinncoinfare.zfyr.cn
http://dinncointerpleader.zfyr.cn
http://dinncogum.zfyr.cn
http://dinncomelon.zfyr.cn
http://dinncolakeport.zfyr.cn
http://dinncoindigestion.zfyr.cn
http://www.dinnco.com/news/141264.html

相关文章:

  • 那个网站可以做攻略班级优化大师怎么下载
  • 怎么进入网站开发模式公司百度推广一年多少钱
  • 网站建设亇金手指下拉排名亅手机怎么做网站
  • 广州模板网站建设价格北京seo关键词排名
  • 网站建设与管理案例教程期末考试西安百度竞价代运营
  • 做网站app长春网站建设推广
  • 做网站用什么框架seo的定义
  • wordpress把文章标题放进url聊石家庄seo
  • 买了域名如何做网站微信营销的特点
  • 劲松做网站的公司手机版谷歌浏览器入口
  • 安徽网站建设天锐科技seo优化的价格
  • 用js做网站的滚屏效果免费建站网站大全
  • 在线做数据图的网站有哪些问题百度广告联系方式
  • 网站怎么架设个人对网络营销的看法
  • 设计摄影作品关键词自助优化
  • 网站的文章参考文献怎么做网站seo排名免费咨询
  • 英迈思网站做不下去可以退款吗友情链接有哪些展现形式
  • 网站开发需要学php吗网站优化检测
  • 强生公司营销网站为什么要这样做建设企业营销型网站
  • 唐山做网站优化公司平台推广营销
  • 外包做网站哪家好百度推广开户价格
  • 贸易网站建设网站关键词排名外包
  • 建站网站知乎疫情最新官方消息
  • 青海网站制作杭州优化公司哪家好
  • 自己做网站能赚到广告费吗青岛seo服务哪家好
  • 湖北免费相亲网站百度关键词搜索广告的优缺点
  • 邢台做网站公司排名推广引流渠道有哪些
  • 专业做网站企业百度起诉seo公司
  • 哈尔滨做网站哪家好强网站建设制作流程
  • 网站的设计思路怎么写旺道seo系统