文章目录

  • 题目描述
    • 二刷

打卡第七天~

  • 也是很常考的一道题了!
  • 感觉和把数字翻译成字符串这道题很像,也都可以用 DFS 来做

题目描述

  • 还是定义全局的 list,在 DFS 的过程不断维护 list
  • 递归结束的情况:已经凑够四个数字(跑完了 string && 没跑完 string)
  • 前导0:当前数字首位为0,直接凑上0并往下一个数字 DFS
  • 其他DFS情况:最多3个数字,并且进行255的范围判断
class Solution {char[] arr;List<String> list = new ArrayList<>();public List<String> restoreIpAddresses(String s) {arr = s.toCharArray();dfs("", 0, 0);return list;}public void dfs(String pre, int integerNums, int start) {// 加了四个,并且跑完了 string 的情况if(start == arr.length) {if(integerNums == 4){list.add(pre.substring(0, pre.length() - 1));}return;}if(integerNums == 4) {return;}// 首位为0,直接冲(不能前导0)if(arr[start] == '0') {pre += '0';if(integerNums != 4) {pre += '.';}dfs(pre, integerNums + 1, start + 1);return;}// 首位不为0, 最多选三个int temp = 0;String tempIP = pre;for(int i = 0; i < 3 && start + i < arr.length; i++) {// 255 判断temp = temp * 10 + (arr[start + i] - '0');if(temp > 255) {break;}tempIP += arr[i + start];dfs(tempIP + '.', integerNums + 1, start + i + 1);}}
}

二刷

  • 思路不难,但是条条框框写起来是真的麻烦。。
class Solution {List<String> ans = new LinkedList<>();char[] arr;public List<String> restoreIpAddresses(String s) {arr = s.toCharArray();dfs("", 0, 0);return ans;}void dfs(String s, int index, int pointCounts) {if(pointCounts > 0 && pointCounts < 4) {s += '.';}if(index == arr.length) {if(pointCounts == 4) {ans.add(s);}return;}if(pointCounts == 4) {return;}if(arr[index] == '0') {dfs(s + '0', index + 1, pointCounts + 1);}else {int num = 0;String tempIP = s;for(int i = 0; i < 3 && index + i < arr.length; i++) {num *= 10;num += arr[i + index] - '0';tempIP += arr[i + index];if(num <= 255) {dfs(tempIP, index + i + 1, pointCounts + 1);}}}}
}

【LeetCode笔记】剑指 Offer 93. 复原 IP 地址(Java、DFS、字符串)相关推荐

  1. Leetcode刷题笔记——剑指offer II (五)【二分、排序、回溯】

    这里写目录标题 二分查找 剑指 Offer II 069. 山峰数组的顶部 剑指 Offer II 070. 排序数组中只出现一次的数字 剑指 Offer II 071. 按权重生成随机数 剑指 Of ...

  2. 《LeetCode力扣练习》剑指 Offer 29. 顺时针打印矩阵 Java

    <LeetCode力扣练习>剑指 Offer 29. 顺时针打印矩阵 Java 一.资源 题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 示例 1: 输入:matr ...

  3. 《LeetCode力扣练习》剑指 Offer 28. 对称的二叉树 Java

    <LeetCode力扣练习>剑指 Offer 28. 对称的二叉树 Java 一.资源 题目: 请实现一个函数,用来判断一棵二叉树是不是对称的.如果一棵二叉树和它的镜像一样,那么它是对称的 ...

  4. 《LeetCode力扣练习》剑指 Offer 27. 二叉树的镜像 Java

    <LeetCode力扣练习>剑指 Offer 27. 二叉树的镜像 Java 一.资源 题目: 请完成一个函数,输入一个二叉树,该函数输出它的镜像. 例如输入: 4 / 2 7 / \ / ...

  5. 【LeetCode】剑指 Offer 59 - I. 滑动窗口的最大值

    [LeetCode]剑指 Offer 59 - I. 滑动窗口的最大值 文章目录 [LeetCode]剑指 Offer 59 - I. 滑动窗口的最大值 package offer;import ja ...

  6. 【LeetCode】剑指 Offer 51. 数组中的逆序对

    [LeetCode]剑指 Offer 51. 数组中的逆序对 文章目录 [LeetCode]剑指 Offer 51. 数组中的逆序对 package offer;public class Soluti ...

  7. 【LeetCode】剑指 Offer 43. 1~n 整数中 1 出现的次数

    [LeetCode]剑指 Offer 43. 1-n 整数中 1 出现的次数 文章目录 [LeetCode]剑指 Offer 43. 1-n 整数中 1 出现的次数 package offer;pub ...

  8. 【LeetCode】剑指 Offer 41. 数据流中的中位数

    [LeetCode]剑指 Offer 41. 数据流中的中位数 文章目录 [LeetCode]剑指 Offer 41. 数据流中的中位数 package offer;import java.util. ...

  9. 【LeetCode】剑指 Offer 37. 序列化二叉树

    [LeetCode]剑指 Offer 37. 序列化二叉树 文章目录 [LeetCode]剑指 Offer 37. 序列化二叉树 package offer;import java.util.Link ...

最新文章

  1. canvas上的像素操作(图像复制,细调)
  2. 从软件思想抽象出几条做事原则
  3. Tensorflow一些常用基本概念与函数(1)
  4. (转)ArcEngine读取数据(数据访问)
  5. 3164 质因数分解
  6. android 请求参数打印,android retrofit 请求参数格式RequestBody的方法
  7. 《ACM国际大学生程序设计竞赛题解Ⅰ》——模拟题
  8. Excel多因素不重复方差分析
  9. SQLServer LIKE 通配符
  10. 【逻辑与计算理论】Lambda 演算的类型与其 Lambda 演算建模
  11. CUDA并行计算 | CUDA算法效率提升关键点概述
  12. 代码质量 重构 代码鸡汤
  13. Auto.js 全命令整理(一) 数据获取专题
  14. Unity3D-射线效果
  15. Himall商城LinqHelper帮助类(1)
  16. 三菱plc恒压供水程序+威纶触摸屏程序本成已用于实际项目中
  17. 学习资料 AND ORR
  18. 吞剑!喷火!这种江湖卖艺套路能吸引观众吗?
  19. 2022茶艺师(初级)操作证考试题库及在线模拟考试
  20. 大众营销OUT,活跃科技教你玩精众营销

热门文章

  1. JDBC--Java Database Connectivity
  2. Leetcode--621. 任务调度器
  3. ns3 统计一个包所经历的时延_【直击UDE2020】显示链接的智慧生活,你我正在经历...
  4. 从‘一边拉琴,一边哭’,看什么是真正的兴趣
  5. Struts2基础知识(三)
  6. Java加密与解密的艺术~Provider
  7. mysql max字符串数值_针对字符串值的mysql:min()和max()。
  8. 大学计算机导论报告,大学计算机导论论文参考.docx
  9. 关于计算机知识竞答的问题,电脑知识竞赛题目有哪些
  10. Arduino PID自整定库