class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return string字符串vector
     */
    int max_num = 255;
    int min_num = 0;
    vector<string> ans;
    string res = "";

    
    void dfs(string& s,int step){
        if(step!=4 && s.empty()) return ;
        if(step==4 && !s.empty()) return ;
        if(step==4 && s.empty()) {
            res.pop_back();//去掉最后一个点
            ans.push_back(res);
            return;
        }
        for(int i=0;i<3 && i<s.size();i++){

            string tmp_str = s.substr(0,i+1);
            int tmp_int = stoi(tmp_str);
            if(tmp_str.size()!=to_string(tmp_int).size()) continue ;//表示将02,这样的数据当做地址
            if(tmp_int>255) continue ;//错误的划分,出现了大于255的值。
            string orginal_res = res;
            string orginal_s = s;
            res+=tmp_str;
            res+=".";
            s = s.substr(i+1);
            dfs(s,step+1);
            s = orginal_s;
            res = orginal_res;
        }
    }
    vector<string> restoreIpAddresses(string s) {
        // write code here
        
        if(s.empty()) return {};
        if(s.size()<4) return {};
        dfs(s,0);
        return ans;
    }
};