网络

教育改变生活

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 921|回复: 0
打印 上一主题 下一主题

Leetcode真题-恢复IP地址

[复制链接]

97

主题

98

帖子

447

积分

版主

Rank: 7Rank: 7Rank: 7

积分
447
跳转到指定楼层
楼主
发表于 2020-6-9 22:13:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题描述:给定仅包含数字的字符串,请通过返回所有可能的有效IP地址组合来还原它。
一个有效的IP地址正好由四个整数(每个整数在0到255之间)组成,并用单点分隔。
例:输入: “ 25525511135” 输出: ["255.255.11.135", "255.255.111.35"]
解析:使用回溯法进行题解
代码:
class Solution {
    List<String> sol;
    public List<String> restoreIpAddresses(String s) {
        sol = new ArrayList<>();
        if (s == null || s.length() == 0) {
            return sol;
        }
        
        dfs(s, 0, new StringBuilder());
        return sol;
    }
   
    void dfs(String s, int n, StringBuilder sb) {
        if (s.length() > 3 * (4 - n)) {
            // e.g. 2.2.25555555 is not possible
            return;
        }
        
        if (n == 4) {
            if (s.length() == 0) {
                sol.add(sb.toString());
            }
            return;
        }
        
        for (int i = 1; i <= 3; i++) {
            if (s.length() < i) {
                break;
            }
            String segment = s.substring(0, i);
            int value = Integer.parseInt(segment);
            if (value <= 255 && String.valueOf(value).length() == i) {
                // segment in range [0,255] and has no leading zero like 0x, 0xx
                StringBuilder tempSb = new StringBuilder(sb);
                tempSb.append(segment);
                tempSb.append(n == 3 ? "" : ".");
                dfs(s.substring(i, s.length()), n+1, tempSb);
            }
        }
    }
}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

WEB前端

QQ|手机版|小黑屋|金桨网|助学堂  咨询请联系站长。

GMT+8, 2025-1-3 08:46 , Processed in 0.032188 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表