leetcode-93. 复原 IP 地址

一、题目

在这里插入图片描述

二、思路

1、dfs深度搜索
2、剪纸,碰到不符合条件的就退出
3、退出条件:要满足字符数量要求(总数不能超过12位,不能小于4位,每确定一位,都要对后面的进行判断);除只有一个0之外,其余字符数超过1的第一位都不能为0,有三个字符的不能大于255

三、代码

class Solution {
public:
    vector<string>res;
    vector<string> restoreIpAddresses(string s) {
        
        int len=s.length();
        if(len<4 || len>12)
        {
            return res;
        }
        string str="";
        dfs(s,str,0,0);
        return res;
    }

    void dfs(string &s,string str,int hight,int start)
    {
        int len= s.length();      
        if(hight>=4 || (len-start)<(4-hight) || (len-start)>(4-hight)*3)
        {
            return;
        }
        if(hight==3 && start<len && len-start<=3 )
        {
            if(s[start]=='0' && start!=len-1)
            {
                return;
            }
            int x=stoi(s.substr(start,len-start));
            if(x<=255)
            {
                res.emplace_back(str+s.substr(start,len-start));
                return;
            }
        }
        if(len>start)
        {
            dfs(s,str+s[start]+'.',hight+1,start+1);
        }
        if(len>start+1 && s[start]!='0')
        {
            dfs(s,str+s[start]+s[start+1]+'.',hight+1,start+2);
        }
        if(len>start+2 && s[start]!='0' && stoi(s.substr(start,3))<=255)
        {
            dfs(s,str+s.substr(start,3)+'.',hight+1,start+3);
        }
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值