leetcode 93:复原IP地址

先判断字符串字符串长度是否处于[4,12]

然后判断字符串将字符串分成从IP地址的第一位进行选择  IP地址每一位最大为255 最小为0  IP地址的每一位所包含的字符串中的位数分别是1 2 3 位  IP位是三位时,要判断是否大于255

void restore(std::vector<std::string> &a,std::string &s,int c,std::string ss,int d){
    if(c==s.size()&&d==4) {
        ss=ss.substr(0,ss.size()-1);
        a.push_back(ss);
        return;
    }else if(d==4&&c!=s.size())
    {
        return;
    }
    std::string ss1="";
    ss1+=s[c+0];
    ss+=ss1;
    ss+=".";
    restore(a,s,c+1,ss,d+1);
    ss=ss.substr(0,ss.size()-ss1.size()-1);
    if(c+1<=s.size()) {
        if(s[c]=='0')
            return;
        ss1 += s[c + 1];
        ss += ss1;
        ss += ".";
        restore(a, s, c + 2, ss, d + 1);
        ss = ss.substr(0, ss.size() - ss1.size() - 1);
    }
    if(c+2<s.size()) {
        ss1 += s[c + 2];
        int f = std::stoi(ss1);
        if (f <= 255) {
            ss += ss1;
            ss += ".";
        } else
            return;
        restore(a, s, c + 3, ss, d + 1);
    }
    return ;
}

std::vector<std::string> restoreIpAddresses(std::string s) {
    std::vector<std::string> a;
    if(s.size()>12||s.size()<4)
        return a;
    std::string ss="";
    int d=0;
    restore(a,s,0,ss,d);
    return a;
}

猜你喜欢

转载自blog.csdn.net/u013263891/article/details/85224523
今日推荐