Restore IP Addresses

本文介绍了一种使用回溯法解决IP地址组合问题的方法,详细解释了核心思想,包括处理IP地址的四个部分,每部分的位数递增,以及合法性的判断条件。文中提供了一个C++类实现,演示如何通过回溯法生成所有可能的有效IP地址组合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Given a string containing only digits, restore it by returning all possible valid IP address combinations.

For example:
Given "25525511135",

return ["255.255.11.135", "255.255.111.35"]. (Order does not matter)

Subscribe to see which companies asked this question

使用 回溯法解决:
主要思想: 一个Ip有四部分,第一部分到第三部分的处理方法一样,每部分的位数逐渐增加,如果出现不合法,就回退,第四部分是第一部分到第三部分取得之后剩余的所有部分,如果合法,就直接加入,否者退出。
注意的条件
1)每一部分的首位不能是 0, 如 10.10.10.01(最后一部分不合法)
2)每一部分转为整数之后小于255

class Solution {
public:
    void restore(vector<string>& results, string s, string ret, int part, int index) {
        if(part == 3) {
            string tmp = s.substr(index, s.size() - index);
            if(tmp.size() > 1 && tmp[0] == '0')
                return;
            if(atoi(tmp.c_str()) <= 255 && tmp.size() <= 3 && tmp.size() > 0)
                results.push_back(ret + "." + tmp);
            return;
        }
        for(int i = 1; i <= 3 && index + i <= s.size(); i++) {
            string tmp = s.substr(index, i);
            if(tmp.size() > 1 && tmp[0] == '0')
                return;
            if(atoi(tmp.c_str()) <= 255) {
                string dot = ret == "" ? "" : ".";
                restore(results, s, ret + dot + tmp, part + 1, index + i);
            }
        }
    }
    vector<string> restoreIpAddresses(string s) {
        vector<string> results;
        string ret = "";
        restore(results, s, ret, 0, 0);
        return results;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值