Backtracking_93. 复原IP地址

给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。

有效的 IP 地址正好由四个整数(每个整数位于 0 到 255 之间组成),整数之间用 '.' 分隔。

示例:

输入: "25525511135"
输出: ["255.255.11.135", "255.255.111.35"]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/restore-ip-addresses


思路:

 此处要建立一个StringBuilder类型的参数tempAddress,为了对字符串进行处理,存储当前形成的IP地址

IP地址是用三点四段的形式,用count来表示有几段

每加入一个段就count+1,表示多了一个部分,如果不是s的第一个数字就需要在该段的前面加上点

每一部分都需要有最多三个数字组成,用for循环控制,判断是否小于等于255,如果是就递归

最后count到4了就说明已经有四段,需要判断当前形成的四段的IP地址是否是符合要求的,如果符合就加入到动态数组中,不符合就回溯

class Solution {
    public List<String> restoreIpAddresses(String s) {
        List<String> addresses = new ArrayList<>();
        //定义一个StringBuilder类型的变量tempAddress用于存储当前形成的IP地址
        StringBuilder tempAddress = new StringBuilder();
        doRestore(0, tempAddress, addresses, s);
        return addresses;
    }

    private void doRestore(int k, StringBuilder tempAddress, List<String> addresses, String s) {
        //如果已经是四段,或者已经到最后了
        if (k == 4 || s.length() == 0) {
            //如果已经四段,并且还到达了最后
            if (k == 4 && s.length() == 0) {
                //符合条件,加入动态数组
                addresses.add(tempAddress.toString());
            }
            //回溯
            return;
        }
        //每个数字至少有三位,并且不能超过最大长度
        for (int i = 0; i < s.length() && i <= 2; i++) {
            if (i != 0 && s.charAt(0) == '0') {
                break;
            }
            //分离出前i + 1位
            String part = s.substring(0, i + 1);
            if (Integer.parseInt(part) <= 255) {
                if (tempAddress.length() != 0) {
                    //如果数值小于256 并且不是第一位IP地址的第一段就加个点
                    part = "." + part;
                }
                //存放
                tempAddress.append(part);
                //递归
                doRestore(k + 1, tempAddress, addresses, s.substring(i + 1));
                //第一参数开始,将一直到第二个参数的前一个位置的内容都删掉,就是将存放的IP地址不符合的删了重新回溯
                tempAddress.delete(tempAddress.length() - part.length(), tempAddress.length());
            }
        }
    }
}
原文地址:https://www.cnblogs.com/zzxisgod/p/13368034.html