#include <string>
#include <vector>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return string字符串vector
     */
    vector<string> restoreIpAddresses(string s) {
        // write code here
        vector<string> ans;
        
        int len = s.size();
        if(len>12)
            return ans;
        // i是第一个数字段结尾下标
        for(int i=0; i+3<len && i<3; ++i)
        {
            int s_1 = stoi(s.substr(0,i+1));
            // 如果该字符段长度大于1,但是首字符为'0',说明有可能是前缀为0的情况,如 "01","010";
            if((i+1>1 && s[0]=='0') || (s_1>255))
                break;

            // j是第二个数字段结尾下标
            for(int j=i+1; j+2<len && j<6; ++j)
            {
                int s_2 = stoi(s.substr(i+1,j-i));
                if((j-i>1 && s[i+1]=='0') || (s_2>255))
                    break;

                // n是第三个数字段结尾下标
                for(int n=j+1; n+1<len && n<9; ++n)
                {
                    int s_3 = stoi(s.substr(j+1,n-j));
                    if((n-j>1 && s[j+1]=='0') || (s_3>255))
                        break;
 
                    // 第四个数字段结尾下标是len-1
                    int s_4 = stoi(s.substr(n+1,len-1-n));
                    if((len-1-n>1 && s[n+1]=='0') || (s_4>255))
                        continue;

                    string str = to_string(s_1) + "." + to_string(s_2) + "."
                                + to_string(s_3) + "." + to_string(s_4);
                    ans.emplace_back(str);
                }
            }
        }

        return ans;
    }
};