LeetCode题解:Restore IP Addresses

Restore IP Addresses


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)

思路:

一共有三个点要确定位置,每一个IP字段的长度是1到3之间的一个数字。穷举的话也无非是最多27种可能性。

题解:

class Solution {
public:
    vector<string> validated;
    
    void verify(const string& s, size_t* l)
    {
        string ip;
        size_t accumu = 0;
        for(size_t i = 0; i < 4; ++i)
        {
            // cut the digit
            string strval = s.substr(accumu, l[i]);
            accumu += l[i];
            
            // validate the starting zero problem
            if (strval.size() > 1 && strval[0] == '0')
                return;
            
            // validate the digit
            int val = atoi(strval.c_str());
            if (val <= 255)
            {
                ip += strval;
                if (i != 3) ip += '.';
            }
            else
                return;
        }
        validated.push_back(ip);
    }
    
    vector<string> restoreIpAddresses(string s)
    {
        size_t input_len = s.size();
        validated.clear();
        
        size_t lens[4];
        for(lens[0] = 1; lens[0] <= 3; ++lens[0])
            for(lens[1] = 1; lens[1] <= 3; ++lens[1])
                for(lens[2] = 1; lens[2] <= 3; ++lens[2])
                    if (lens[0] + lens[1] + lens[2] >= input_len)
                        break;
                    else
                    {
                        lens[3] = input_len - lens[0] - lens[1] - lens[2];
                        verify(s, lens);
                    }
        return validated;
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值