LeetCode 93-复制 IP地址

题目链接:LeetCode93

欢迎留言交流,每天都会回消息。

java 复制代码
class Solution {
    //定义结果集,返回最终结果
    List<String> rs = new ArrayList<>();
    public List<String> restoreIpAddresses(String s) {
        //将字符串包装为可变长度的字符串
        StringBuilder sb = new StringBuilder(s);
        backTracking(sb, 0, 0);
        return rs;
    }
    //sb:传入的字符串
    //startIdx:用于记录在那个位置分割字符串
    //dotCount:IP中 '.' 的个数
    void backTracking(StringBuilder sb, int startIdx, int dotCount){
        //'.'的个数为3的时候
        if(dotCount == 3){
            //判断最后一个 '.' 后面剩余的字符是否复合规则
            if(isValid(sb, startIdx, sb.length() - 1)){
                rs.add(sb.toString());
            }
            return;
        }

        for(int i = startIdx; i < sb.length(); i++){
            //如果字符合法
            if(isValid(sb, startIdx, i)){
                //字符后面插入'.'
                sb.insert(i + 1, '.');
                //递归
                backTracking(sb, i + 2, dotCount + 1);
                //回溯
                sb.deleteCharAt(i + 1);
            }else{
                break;
            }
        }
    }

    //判断start到end这段字符是否为有效的字符
    private boolean isValid(StringBuilder s, int start, int end){
        if(start > end){
            return false;
        }
        //首字母为零,而且字母数大于等于2的字串:013 
        if(s.charAt(start) == '0' && start != end){
            return false;
        }
        int num = 0;
        //遍历start到end字符将字符转换为数字,将数值和255比较大小
        for(int i = start; i <= end; i++){
            int digit = s.charAt(i) - '0';
            num = num * 10 + digit;
            if(num > 255){
                return false;
            }
        }
        return true;
    }
}
相关推荐
学Linux的语莫1 分钟前
python项目打包为镜像
java·python·spring
秋刀鱼程序编程19 分钟前
Java编程基础入门(四)---选择循环语句
java·开发语言·算法
一条咸鱼_SaltyFish21 分钟前
WebFlux vs MVC:Gateway集成若依框架的技术选型之争
java·开发语言·微服务·gateway·mvc·开源软件·webflux
wen__xvn21 分钟前
基础算法集训第04天:选择排序和冒泡排序
数据结构·算法·leetcode
充值修改昵称29 分钟前
数据结构基础:二叉树高效数据结构的奥秘
数据结构·python·算法
独自归家的兔30 分钟前
Java反射之根:Class类生成机制深度剖析与最佳实践
java·开发语言
悟能不能悟44 分钟前
Gson bean getxxx,怎么才能返回给前端
java·前端
Apex Predator1 小时前
本地库导入到nexus
java·服务器·前端
仍然.1 小时前
Java---反射、枚举、lambda表达式 和 泛型进阶
java·开发语言
啊阿狸不会拉杆1 小时前
《机器学习》第四章-无监督学习
人工智能·学习·算法·机器学习·计算机视觉