LeetCode_回溯_中等_93.复原 IP 地址

news/2024/11/23 2:54:44/

目录

  • 1.题目
  • 2.思路
  • 3.代码实现(Java)

1.题目

有效 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 中的任何数字。你可以按任何顺序返回答案。

示例 1:
输入:s = “25525511135”
输出:[“255.255.11.135”,“255.255.111.35”]

示例 2:
输入:s = “0000”
输出:[“0.0.0.0”]

示例 3:
输入:s = “101023”
输出:[“1.0.10.23”,“1.0.102.3”,“10.1.0.23”,“10.10.2.3”,“101.0.2.3”]

提示:
1 <= s.length <= 20
s 仅由数字组成

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/restore-ip-addresses

2.思路

(1)回溯
思路参考本题官方题解。

3.代码实现(Java)

//思路1————回溯
class Solution {static final int SEG_COUNT = 4;List<String> res = new ArrayList<>();int[] segments = new int[SEG_COUNT];public List<String> restoreIpAddresses(String s) {backtrack(s, 0, 0);return res;}public void backtrack(String s, int segId, int segStart) {//如果找到了 4 段 IP 地址并且遍历完了字符串,那么就是一种答案if (segId == SEG_COUNT) {if (segStart == s.length()) {StringBuilder builder = new StringBuilder();for (int i = 0;i < SEG_COUNT; i++) {builder.append(segments[i]);if (i != SEG_COUNT - 1) {builder.append('.');}}res.add(builder.toString());}return;}//如果还没有找到 4 段 IP 地址就已经遍历完了字符串,那么提前回溯if (segStart == s.length()) {return;}//由于不能有前导零,如果当前数字为 0,那么这一段 IP 地址只能为 0if (s.charAt(segStart) == '0') {segments[segId] = 0;backtrack(s, segId + 1, segStart + 1);}//一般情况,枚举每一种可能性并递归int addr = 0;for (int segEnd = segStart; segEnd < s.length(); segEnd++) {addr = addr * 10 + (s.charAt(segEnd) - '0');if (addr > 0 && addr <= 255) {segments[segId] = addr;backtrack(s, segId + 1, segEnd + 1);} else {break;}}}
}

http://www.ppmy.cn/news/53281.html

相关文章

08_ThreadPool线程池

1. 架构说明 Java中的线程池是通过Executor框架实现的&#xff0c;该框架中用到了Executor&#xff0c;ExecutorService&#xff0c;ThreadPoolExecutor这几个类。 Executor接口是顶层接口&#xff0c;只有一个execute方法&#xff0c;过于简单。通常不使用它&#xff0c;而是…

基于异常值鲁棒性问题的极限学习机的回归问题研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

MySQL(七)-日期和时间函数的使用解析

日期和时间函数的使用解析 1 获取当前日期的函数和获取当前时间的函数2 获取当前日期和时间的函数3 UNIX时间戳函数4 返回UTC日期的函数和返 UTC 时间的函数5 获取月份的函数MONTH(date)和 MONTHNAME(date)6 获取星期的函数DAYNAME(d)DAYOFWEEK(d)和WEEKDAY(d)7 获取星期数的函…

计算机程序安装及使用须知_kaic

安装及使用须知 1 数据库建模程序的使用 本文件夹中的“PowerDesigner建模”目录下包含三个可运行文件TMS1.cdm&#xff0c;TMS.cdm&#xff0c;TMS.pdm分别为TMS系统的实体关系简图、实体关系图和数据库模型&#xff0c;使用PowerDesigner集成开发环境打开任意一个文件即可运…

系统升级 | RK3568开发平台成功搭载SylixOS国产实时操作系统

SylixOS 是一款大型嵌入式实时操作系统&#xff0c;诞生于2006年&#xff0c;起初它只是一个小型多任务调度器&#xff0c;经过多年开发&#xff0c;SylixOS 目前已经成为一个功能完善、性能卓越、可靠稳定的嵌入式系统软件开发平台。 SylixOS 作为实时操作系统的后来者&…

Machine Learning-Ex6(吴恩达课后习题)Support Vector Machines

目录 1. Support Vector Machines 1.1 Example Dataset 1 1.2 SVM with Gaussian Kernels 1.2.1 Gaussian Kernel 1.2.2 Example Dataset 2 1.2.3 Example Dataset 3 2. Spam Classification 2.1 Preprocessing Emails 2.1.1 Vocabulary List 2.2 Extracting Feature…

[React] useRef用法和特性

useRef 与 useState 的区别 一般在使用react-hook的时候&#xff0c;我们用到最多的就是定义变量&#xff0c;以及对应的修改变量 下面是一个最基本的 react-hook 应用程序 const Home () > {const [username, setUserName] useState();return &#xff08;<input va…

mysql数据库自动备份

前言 服务器中数据库的数据是最重要的东西,如果因为某些情况导致数据库数据错误,数据错乱或数据库崩溃,这时一定要及时的修复,但如果数据丢失或数据没法用了,这时就要回滚数据了,而这时就需要我们经常的备份数据库的数据 正文 一般别人都会推荐使用Navicat来备份和连接数据库…