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

LeetCode //C - 93. Restore IP Addresses

93. Restore IP Addresses

A valid IP address consists of exactly four integers separated by single dots. Each integer is between 0 and 255 (inclusive) and cannot have leading zeros.

  • For example, “0.1.2.201” and “192.168.1.1” are valid IP addresses, but “0.011.255.245”, “192.168.1.312” and “192.168@1.1” are invalid IP addresses.

Given a string s containing only digits, return all possible valid IP addresses that can be formed by inserting dots into s. You are not allowed to reorder or remove any digits in s. You may return the valid IP addresses in any order.
 

Example 1:

Input: s = “25525511135”
Output: [“255.255.11.135”,“255.255.111.35”]

Example 2:

Input: s = “0000”
Output: [“0.0.0.0”]

Example 3:

Input: s = “101023”
Output: [“1.0.10.23”,“1.0.102.3”,“10.1.0.23”,“10.10.2.3”,“101.0.2.3”]

Constraints:
  • 1 <= s.length <= 20
  • s consists of digits only.

From: LeetCode
Link: 93. Restore IP Addresses


Solution:

Ideas:
  • isValid Function: Checks if the substring s[start:end] is a valid segment of an IP address.
  • backtrack Function: Recursively tries to build the IP address. It places a dot after 1 to 3 valid digits and moves on to the next segment.
  • restoreIpAddresses Function: Initializes necessary data structures and starts the backtracking process.
Code:
/*** Note: The returned array must be malloced, assume caller calls free().*/int isValid(char *s, int start, int end) {if (start > end) {return 0;}// "0" is valid, but "0x", "09", etc. are not validif (s[start] == '0' && start != end) {return 0;}int num = 0;for (int i = start; i <= end; i++) {if (s[i] < '0' || s[i] > '9') { // non-digit charactersreturn 0;}num = num * 10 + (s[i] - '0');if (num > 255) {return 0;}}return 1;
}void backtrack(char *s, int start, int part, char *ip, int len, char **result, int *returnSize) {if (part == 4 && start == strlen(s)) {ip[len - 1] = '\0'; // remove the last dotresult[*returnSize] = strdup(ip);(*returnSize)++;return;}if (part == 4 || start == strlen(s)) {return;}int addressLen = strlen(s);for (int i = 1; i <= 3; i++) {if (start + i > addressLen) {break;}if (isValid(s, start, start + i - 1)) {ip[len] = s[start];if (i > 1) {ip[len + 1] = s[start + 1];}if (i > 2) {ip[len + 2] = s[start + 2];}ip[len + i] = '.';backtrack(s, start + i, part + 1, ip, len + i + 1, result, returnSize);}}
}char** restoreIpAddresses(char* s, int* returnSize) {*returnSize = 0;int len = strlen(s);if (len < 4 || len > 12) {return NULL;}char **result = (char **)malloc(100 * sizeof(char *));char *ip = (char *)malloc((len + 4) * sizeof(char));backtrack(s, 0, 0, ip, 0, result, returnSize);free(ip);return result;
}

相关文章:

LeetCode //C - 93. Restore IP Addresses

93. Restore IP Addresses A valid IP address consists of exactly four integers separated by single dots. Each integer is between 0 and 255 (inclusive) and cannot have leading zeros. For example, “0.1.2.201” and “192.168.1.1” are valid IP addresses, bu…...

【数据结构】栈和队列OJ面试题

20. 有效的括号 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;由于C语言没有栈的接口&#xff0c;所以我们需要自己造一个“模子”。我们直接copy之前的实现的栈的接口就可以了&#xff08;可以看我之前的博客【数据结构】栈和队列-CSDN博客copy接口&#xff09;&…...

【联邦学习——手动搭建简易联邦学习】

1. 目的 用于记录自己在手写联邦学习相关实验时碰到的一些问题&#xff0c;方便自己进行回顾。 2. 代码 2.1 本地模型计算梯度更新 # 比较训练前后的参数变化 def compare_weights(new_model, old_model):weight_updates {}for layer_name, params in new_model.state_dic…...

Springboot项目如何创建单元测试

文章目录 目录 文章目录 前言 一、SpringBoot单元测试的使用 1.1 引入依赖 1.2 创建单元测试类 二、Spring Boot使用Mockito进行单元测试 2.1 Mockito中经常使用的注解以及注解的作用 2.2 使用Mockito测试类中的方法 2.3 使用Mockito测试Controller层的方法 2.4 mock…...

Win10 如何同时保留两个CUDA版本并自由切换使用

环境&#xff1a; Win10 专业版 CUDA11.3 CUDA11.8 问题描述&#xff1a; Win10 如何同时保留两个CUDA版本并自由切换 解决方案&#xff1a; 在同一台计算机上安装两个CUDA版本并进行切换可以通过一些环境配置来实现。这通常涉及到管理环境变量&#xff0c;特别是PATH和L…...

实验室纳新宣讲会(java后端)

前言 这是陈旧已久的草稿2021-09-16 15:41:38 当时我进入实验室&#xff0c;也是大二了&#xff0c;实验室纳新需要宣讲&#xff0c; 但是当时有疫情&#xff0c;又没宣讲成。 现在2024-5-12 22:00:39&#xff0c;发布到[个人]专栏中。 实验室纳新宣讲会&#xff08;java后…...

class常量池、运行时常量池和字符串常量池的关系

类常量池、运行时常量池和字符串常量池这三种常量池&#xff0c;在Java中扮演着不同但又相互关联的角色。理解它们之间的关系&#xff0c;有助于深入理解Java虚拟机&#xff08;JVM&#xff09;的内部工作机制&#xff0c;尤其是在类加载、内存分配和字符串处理方面。 类常量池…...

Java | Leetcode Java题解之第88题合并两个有序数组

题目&#xff1a; 题解&#xff1a; class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {int p1 m - 1, p2 n - 1;int tail m n - 1;int cur;while (p1 > 0 || p2 > 0) {if (p1 -1) {cur nums2[p2--];} else if (p2 -1) {cur nums1[p…...

韵搜坊(全栈)-- 前后端初始化

文章目录 前端初始化后端初始化 前端初始化 使用ant design of vue 组件库 官网快速上手&#xff1a;https://www.antdv.com/docs/vue/getting-started-cn 安装脚手架工具 进入cmd $ npm install -g vue/cli # OR $ yarn global add vue/cli创建一个项目 $ vue create ant…...

Android:资源的管理,Glide图片加载框架的使用

目录 一&#xff0c;Android资源分类 1.使用res目录下的资源 res目录下资源的使用&#xff1a; 2.使用assets目录下的资源 assets目录下的资源的使用&#xff1a; 二&#xff0c;glide图片加载框架 1.glide简介 2.下载和设置 3.基本用法 4.占位符&#xff08;Placehold…...

conll-2012-formatted-ontonotes-5.0中文数据格式说明

CoNLL-2012 数据格式是用于自然语言处理任务的一种常见格式&#xff0c;特别是在命名实体识别、词性标注、句法分析和语义角色标注等领域。这种格式在 CoNLL-2012 共享任务中被广泛使用&#xff0c;该任务主要集中在语义角色标注上。 CoNLL-2012 数据格式通常包括多列&#xf…...

SpringBoot集成Seata分布式事务OpenFeign远程调用

Docker Desktop 安装Seata Server seata 本质上是一个服务&#xff0c;用docker安装更方便&#xff0c;配置默认&#xff1a;file docker run -d --name seata-server -p 8091:8091 -p 7091:7091 seataio/seata-server:2.0.0与SpringBoot集成 表结构 项目目录 dynamic和dyna…...

视觉检测系统,是否所有产品都可以进行视觉检测?

视觉检测系统作为一种先进的质检工具&#xff0c;虽然具有广泛的应用范围&#xff0c;但并非所有产品都适合进行视觉检测。本文将探讨视觉检测系统的适用范围及其局限性。 随着机器视觉技术的快速发展&#xff0c;视觉检测系统已广泛应用于各个行业&#xff0c;为产品质检提供…...

通过金山和微软虚拟打印机转换PDF文件,流程方法及优劣对比

文章目录 一、WPS/金山 PDF虚拟打印机1、常规流程2、PDF文件位置3、严重缺陷二、微软虚拟打印机Microsoft Print to Pdf1、安装流程2、微软虚拟打印机的优势一、WPS/金山 PDF虚拟打印机 1、常规流程 安装过WPS办公组件或金山PDF独立版的电脑,会有一个或两个WPS/金山 PDF虚拟…...

采用java+B/S开发的全套医院绩效考核系统源码springboot+mybaits 医院绩效考核系统优势

采用java开发的全套医院绩效考核系统源码springbootmybaits 医院绩效考核系统优势 医院绩效管理系统解决方案紧扣新医改形势下医院绩效管理的要求&#xff0c;以“工作量为基础的考核方案”为核心思想&#xff0c;结合患者满意度、服务质量、技术难度、工作效率、医德医风等管…...

驱动开发-用户空间和内核空间数据传输

1.用户空间-->内核空间&#xff08;写&#xff09; #include<linux/uaccess.h> int copy_from_user(void *to,const void __user volatile*from,unsigned long n) 函数功能&#xff1a;将用户空间数据拷贝到内核空间 参数&#xff1a; to&#xff1a;内核空间首地…...

【408精华知识】速看!各种排序的大总结!

文章目录 一、插入排序&#xff08;一&#xff09;直接插入排序&#xff08;二&#xff09;折半插入排序&#xff08;三&#xff09;希尔排序 二、交换排序&#xff08;一&#xff09;冒泡排序&#xff08;二&#xff09;快速排序 三、选择排序&#xff08;一&#xff09;简单选…...

【STM32 |程序实例】按键控制、光敏传感器控制蜂鸣器

目录 前言 按键控制LED 光敏传感器控制蜂鸣器 前言 上拉输入&#xff1a;若GPIO引脚配置为上拉输入模式&#xff0c;在默认情况下&#xff08;GPIO引脚无输入&#xff09;&#xff0c;读取的GPIO引脚数据为1&#xff0c;即高电平。 下拉输入&#xff1a;若GPIO引脚配置为下…...

Spring boot使用websocket实现在线聊天

maven依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spr…...

品牌设计理念和logo设计方法

一 品牌设计的目的 设计是为了传播&#xff0c;让传播速度更快&#xff0c;传播效率更高&#xff0c;减少宣传成本 二 什么是好的品牌设计 好的设计是为了让消费者更容易看懂、记住的设计&#xff0c; 从而辅助传播&#xff0c; 即 看得懂、记得住。 1 看得懂 就是让别人看懂…...

Unity本地化工作流:基于ULP的可维护多语言工程实践

1. 这不是“加个插件就完事”的翻译方案&#xff0c;而是Unity项目里真正能落地的本地化工作流 “Unity游戏自动翻译插件”——光看标题&#xff0c;很多人第一反应是&#xff1a;拖进Project窗口、点几下按钮、导出Excel、等AI吐出译文、再一键回填……然后就上线多语言了&…...

从CRUD到AI:普通程序员转型大模型应用开发指南(收藏版)

本文针对有3-5年Java、前端或PHP开发经验的程序员&#xff0c;探讨了如何转型AI大模型应用开发。文章指出&#xff0c;虽然表面看起来与现有工作不同&#xff0c;但CRUD经验反而是转型优势&#xff0c;如API调用、业务流程理解、数据库知识和调试能力等。转型只需掌握Python基础…...

Jetpack Compose 动画使用指南

Jetpack Compose 动画使用指南 ⚡ 快速上手 Compose 动画&#xff0c;6 大核心 API 结合项目&#xff1a;仓库地址 目录 animate*AsState — 最基础的动画AnimatedVisibility — 显示/隐藏动画updateTransition — 多值协同过渡Crossfade — 页面/内容切换AnimatedContent —…...

AgiBot X1实时内核配置:Linux实时补丁与性能优化终极指南

AgiBot X1实时内核配置&#xff1a;Linux实时补丁与性能优化终极指南 【免费下载链接】agibot_x1_infer The inference module for AgiBot X1. 项目地址: https://gitcode.com/gh_mirrors/agi/agibot_x1_infer AgiBot X1是一款先进的人形机器人&#xff0c;其infer模块&…...

2026特级防火卷帘门价格明细、国标参数及选购避坑指南(河北厂家实测)

在商业综合体、地下车库、厂房消防验收场景中&#xff0c;特级防火卷帘门是核心防火分隔设备&#xff0c;因具备3小时极限耐火极限&#xff0c;成为大型建筑消防报审的刚需产品。很多工程采购、消防从业者在选型时&#xff0c;容易混淆普通卷帘与特级卷帘的区别&#xff0c;同时…...

Java学习笔记——DAY3

目录 1、Java方法 2、方法的定义 3、方法调用 4、方法的重载 5、命令行传参 6、可变参数 7、递归 1、Java方法 Java方法是语句的集合&#xff0c;它们在一块执行一个功能。 方法是解决一类问题的步骤的有序集合方法包含与类或对象中方法在程序中被创建&#xff0c;在其…...

炉石传说佣兵战记自动化脚本:告别重复操作的全能指南

炉石传说佣兵战记自动化脚本&#xff1a;告别重复操作的全能指南 【免费下载链接】lushi_script This script is to save your time from Mercenaries mode of Hearthstone 项目地址: https://gitcode.com/gh_mirrors/lu/lushi_script 还在为《炉石传说》佣兵战记模式中…...

Godot纸牌游戏框架:分层架构与卡牌状态管理

1. 这不是又一个“通用游戏框架”&#xff0c;而是一套专为纸牌游戏设计的骨骼系统你有没有试过在Godot里从零搭一张卡牌游戏&#xff1f;我试过三次——第一次用Node2D硬堆&#xff0c;拖了二十多个场景&#xff0c;连抽卡动画都得手写Tween&#xff1b;第二次改用Resource做卡…...

webdriver_manager自动化管理ChromeDriver原理与CI/CD最佳实践

1. 为什么你还在手动下载ChromeDriver&#xff1f;——一个被低估的日常损耗“又双叒叕报错了&#xff1a;‘chromedriver executable needs to be in PATH’。”这句话我过去三年在团队 Slack 里至少见过 27 次&#xff0c;平均每周一次。不是新人&#xff0c;是写了五年 Pyth…...

5分钟搞定专业照片水印:Semi-Utils让你的摄影作品瞬间升级

5分钟搞定专业照片水印&#xff1a;Semi-Utils让你的摄影作品瞬间升级 【免费下载链接】semi-utils 一个批量添加相机机型和拍摄参数的工具&#xff0c;后续「可能」添加其他功能。 项目地址: https://gitcode.com/gh_mirrors/se/semi-utils 还在为照片添加水印而烦恼吗…...