【LeetCode第93题】复原IP地址(java实现)

【LeetCode第93题】复原IP地址


题目
给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。有效的 IP 地址正好由四个整数(每个整数位于 0 到 255 之间组成),整数之间用 ‘.’ 分隔。

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

递归+回溯

题目可以理解为一段字符串分成几断。思路就是先分一段出来,然后再把后面的字符串继续分,这是很常规的递归思想。也就是后续的动作都是重复的。

暂时分出这一段,是需要考虑分出来的长度的。以“25525511135”为例,ip地址每一段长度最长是3,第一段分出来的可以是“2”,可以是“25”,可以是“255”,有三种情况,然后将后面的字符串分为3段。

递归终止条件,就是看最后一次的字符串是不是符合ip地址的要求,即长度是1或者2或者3,数值的大小是小于等于255的。这里说一下为什么是255,ip地址是32位的,总共有4端,每一段是8位,那么最大就是(11111111)即255。符合这个要求的,说明这条路径上分段是合理的,维护一个全局的List存放结果即可。

这递归过程中,有一个剪枝的地方:0的特殊性,0放在每一段开头时长度只能是1,也就是说可以“0.0.10.100”,但不可以“0.00.01.011”。这里需要剪枝。

代码实现

递归+回溯:
回溯过程中就是把之前已经添加进暂存StringBuffer的一段删掉。

1class Solution {
   
 2    public List<String> res;
 3    public StringBuffer sb = new StringBuffer();
 4
 5    public List<String> restoreIpAddresses(String s) {
   
 6        res = new ArrayList<>();
 7        if (s.length() <= 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值