leetcode刷题. 93. 复原IP地址. 每日打卡

本文探讨了一种通过暴力破解复原数字字符串为IP地址格式的算法。详细介绍了判断子串是否符合IP段规则的函数ipTest,以及主函数restoreIpAddresses如何遍历字符串,寻找所有可能的IP地址组合。

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

 

暴力破解吧,没太多技巧。 

bool ipTest(string s) {

        if (s.empty())
                return false;
        if (s.length() > 3) return false;
        if (s.length() == 1) return true;
        if (s.length() < 3 && s[0] == '0') return false;
        if (s.length() < 3) return true;

        return s <= "255";
}

vector<string> restoreIpAddresses(string s) {

        vector<string> output;
        for (int l1 = 0; l1 < s.length() && l1 < 3; l1++) {

                if (!ipTest(s.substr(0, l1 + 1)))
                        break;

                for (int l2 = l1 + 1; l2 < s.length() && l2 < l1 + 4; l2++) {

                        if (!ipTest(s.substr(l1 + 1, l2 - l1)))
                                break;

                        for (int l3 = l2 + 1; l3 < s.length() && l3 < l2 + 4; l3++) {

                                if (!ipTest(s.substr(l2 + 1, l3 - l2)))
                                        break;

                                for (int l4 = l3 + 1; l4 < s.length() && l4 < l3 + 4; l4++) {

                                        if (!ipTest(s.substr(l3 + 1, l4 - l3)))
                                                break;

                                        if (l4 == s.length() - 1) {

                                                string tmp = s.substr(0, l1 + 1) + '.' +
                                                        s.substr(l1 + 1, l2 - l1) + '.' +
                                                        s.substr(l2 + 1, l3 - l2) + '.' +
                                                        s.substr(l3 + 1, l4 - l3);
                                                output.push_back(tmp);
                                        }
                                }
                        }
                }
        }
        return output;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值