LeetCode 刷题【93. 复原 IP 地址】

93. 复原 IP 地址

自己做

解:回溯法

cpp 复制代码
class Solution {
private:
    vector<string> res;

public:
    void tryIpAddresses(string &s, int index, int i, string &ip){           //index代表s的下标索引,i代表是第几段IP地址(分四段),ip即是保存的结果
        if((int)s.size() - index > (4 - i) * 3 )                            //取不完完整的IP地址,比如最多取12位(3 * 4),但是字符串却有20位,这时候就取不完了,必然组不成IP地址
            return;

        if(ip.size() - 1 == s.size() + 3 && i == 4){                       //保存结果【已经取完四段IP地址】
            ip.pop_back();                                                 //弹出'.'
            res.push_back(ip);
            ip.push_back('.');
            return;
        }

        //尝试取一位
        ip.push_back(s[index]);
        ip.push_back('.');
        tryIpAddresses(s, index + 1, i + 1, ip);
        ip.pop_back();
        ip.pop_back();

        //尝试取两位
        if(index + 1 < (int)s.size() && s[index] > '0'){
            ip.push_back(s[index]);
            ip.push_back(s[index + 1]);
            ip.push_back('.');
            tryIpAddresses(s, index + 2, i + 1, ip);
            ip.pop_back();
            ip.pop_back();
            ip.pop_back();
        }
        
        //尝试取三位
        if(index + 2 < (int)s.size() && 
        (s[index] == '1' || 
        s[index] == '2' && s[index + 1] == '5' && s[index + 2] <= '5' || 
        s[index] == '2' && s[index + 1] < '5')){
            ip.push_back(s[index]);
            ip.push_back(s[index + 1]);
            ip.push_back(s[index + 2]);
            ip.push_back('.');
            tryIpAddresses(s, index + 3, i + 1, ip);
            ip.pop_back();
            ip.pop_back();
            ip.pop_back();
            ip.pop_back();
        }
        
    }

    vector<string> restoreIpAddresses(string s) {
        string str;
        tryIpAddresses(s, 0, 0, str);
        return res;
    }
};
相关推荐
故事和你919 小时前
洛谷-算法2-3-分治与倍增5
开发语言·数据结构·c++·算法·动态规划·图论
北顾笙98010 小时前
day37-数据结构力扣
数据结构·算法·leetcode
小程故事多_8010 小时前
[大模型面试系列] 破解 Agent 软故障困局,四层防御 + 可观测性,筑牢生产级稳健性防线
人工智能·面试·职场和发展·智能体
啦啦啦_999910 小时前
1. 逻辑回归
算法·机器学习·逻辑回归
fengenrong10 小时前
20260429
c++·算法
南宫萧幕11 小时前
Python与Simulink联合仿真:基于DQN的HEV能量管理策略建模与全链路排雷实战
开发语言·人工智能·python·算法·机器学习·matlab·控制
apollowing11 小时前
启发式算法WebApp实验室:从搜索策略到群体智能的能力进阶(优)
算法·启发式算法·web app
Chat_zhanggong34512 小时前
主推NT98336BG作用有哪些?
嵌入式硬件·算法
Run_Teenage12 小时前
算法:线段树
算法
Westward-sun.12 小时前
YOLOv2算法全方位解析:从BatchNorm到聚类先验框的九大改进
算法·yolo·聚类