力扣小白刷题之93题复原IP地址

题目描述

在这里插入图片描述

思路

使用回溯和递归的思想:
1. 首先创建addresses来接收复原后的所有ip地址,然后通过创建回溯方法进行筛选。最终返回addresses
2. 回溯方法的四个参数:1.给定的数字字符串s;2.回溯过程中遍历到的位置;3. 当前确定好的ip段的数量;4. 收集结果的addresses
3. 考虑方法体出口:如果确定好4段并且遍历完整个s,就将cur之间的段以 . 分隔开来放入addresses
4. 接下来对s进行筛选,其中注意每段的长度最大为3,拆箱成int后的大小不超过255,起始位置不能为0
5. 控制好这些边界条件后就可以正常的利用递归和回溯遍历字符串

代码

在这里插入图片描述

一些代码问题

  1. String.join()方法:连接指定数组的元素或集合的成员,在每个元素或成员之间使用指定的分割符。
  2. String.StartsWith()方法:用于检测字符串是否以指定的前缀开始
    语法
    public boolean startsWith(String prefix, int toffset)

    public boolean startsWith(String prefix)
    参数
    prefix – 前缀。
    toffset – 字符串中开始查找的位置。
  3. java中Integer.parseInt和Integer.valueOf 的区别:
    • static int parseInt(String s) 将字符串参数作为有符号的十进制整数进行分析。
    • static Integer valueOf(int i) 返回一个表示指定的 int 值的 Integer 实例。
    • static Integer valueOf(String s) 返回保持指定的 String 的值的 Integer 对象。
    • 从返回值可以看出他们的区别
    • parseInt()返回的是基本类型int 而valueOf()返回的是包装类Integer
    • Integer是可以使用对象方法的 而int类型就不能和Object类型进行互相转换 。
  4. Java 集合类中的 List.remove() 方法用于移出列表中的指定元素。返回值为被移除的元素。

关于回溯算法

回溯算法实际上就是在一个树形问题上做深度优先遍历,因此首先需要把问题转换为树形问题。
在画树形图的过程中,有一些枝叶是没有必要的,把没有必要的枝叶减去的操作就是剪枝,在代码中一般通过 break 或者 continue 和 return(表示递归终止)实现。
在这里插入图片描述

代码优化

在这里插入图片描述

StringBuilder用来存放构造的ip地址,避免大量字符串的拼接所以使用此类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值