#include <string>
#include <vector>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return string字符串vector
     */
    vector<string> restoreIpAddresses(string s) {
        // 方法1,进行枚举
        //首先判断特殊情况
        if(s.size() < 4) return {};
        //其次建立保存字符串数组的容器
        vector<string> ans;
        int n = s.size();
        //遍历
        for(int a = 1; a <= 3 && a <= n-3; a++ ){//截取第一个数
            for(int b = a + 1; b <= a + 3 && b <=  n -2 ; b ++){//截取第二个数
                for(int c  = b + 1; c <= b + 3 && c <= n - 1; c++ ){//截取第三个数

                if(n - c > 3 ) continue; //最后一个数字若是长度大于3,则跳过本次循环
                //截取字符串
                string ip1 = s.substr(0, a);
                string ip2 = s.substr(a, b - a);
                string ip3 = s.substr(b , c - b);
                string ip4 = s.substr(c );
                //判断每个字符串数字的合法性
                if(stoi(ip1) > 255|| stoi(ip2) > 255 || stoi(ip3) > 255 || stoi(ip4) > 255)
                continue;
                //判断四个字符串中是否有前缀0,如果有以上两种情况都跳过本次循环
                if((ip1.size() > 1 && ip1[0] == '0')||ip2.size() > 1 && ip2[0] == '0'||ip3.size() > 1 && ip3[0] == '0'||ip4.size() > 1 && ip4[0] == '0')
                continue;
                //将四个字符串进行拼接,加入逗点,最后push进字符串容器中
                string temp = ip1 + "." + ip2 + "." + ip3 + "." + ip4;
                ans.push_back(temp);

                }     
            }
        }
        return  ans;
    }
};