C++LeetCode 每日一题 - 复原IP地址

题目链接:https://leetcode-cn.com/problems/restore-ip-addresses/

Description

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

有效的 IP 地址正好由四个整数(每个整数位于 0 到 255 之间组成),整数之间用 ‘.’ 分隔。

Sample
输入: "25525511135"
输出: ["255.255.11.135", "255.255.111.35"]
Solution

枚举前面三个数字的长度,使用三重for循环去截取,判断一下是否符合题目要求,即可。

AC Code
class Solution {
public:
    vector<string> restoreIpAddresses(string s) {
        vector<string> ss;
        int len=s.length();
        if(len<4||len>12) return ss;
        for(int i=1;i<=3;i++){
            if(i==3&&s.substr(0,3)>"255") continue;
            if(i>1&&s.substr(0,1)=="0") continue;//可能会出现"012"这种情况,显然题目要求不可以有前导零
            for(int j=1;j<=3;j++){
                if(len-i-j<=0) continue;
                if(j==3&&s.substr(i,3)>"255") continue;
                if(j>1&&s.substr(i,1)=="0") continue;
                for(int k=1;k<=3;k++){
                    if(len-i-j-k<=0||len-i-j-k>3) continue;//枚举前面三个数字的长度,最后的数字长度可知
                    if(k==3&&s.substr(i+j,3)>"255") continue;
                    if(k>1&&s.substr(i+j,1)=="0") continue;
                    if(len - i - j - k==3&&s.substr(i+j+k)>"255") continue;
                    if(len-i-j-k>1&&s.substr(i+j+k,1)=="0") continue;
                    else{
                       string str;
                       str+=s.substr(0,i);
                       str+='.';
                       str+=s.substr(i,j);
                       str+='.';
                       str+=s.substr(i+j,k);
                       str+='.';
                       str+=s.substr(i+j+k);
                       ss.push_back(str);
                    }
                }
            }
        }
        return ss;
    }
};

猜你喜欢

转载自blog.csdn.net/buibuilili/article/details/107889558