自学内容网 自学内容网

力扣打卡12:复原IP地址

链接:93. 复原 IP 地址 - 力扣(LeetCode)

这道题需要对字符串进行操作,我选择了三层循环,其实还可以递归。

我在循环时进行了剪枝,比如一些情况直接跳出循环。

我的代码:

class Solution {
public:
    vector<string> restoreIpAddresses(string s) {
        vector<string> ans;
        if(s.size()>12||s.size()<4) return ans;
        string t;
        for(int i1=0;i1<3;i1++)
        {
            string q3=s.substr(0,i1+1);
            t+=s[i1]; t+='.';
            if((q3.size()==3&&q3>"255")||(q3>"0"&&q3<"1")) break;
            
            int l1=t.size();
            for(int i2=i1+1;i2<i1+4;i2++)
            {
                if(i2>=s.size()) break;
                string q2=s.substr(i1+1,i2-i1);
                t+=s[i2]; t+='.';
                if((q2.size()==3&&q2>"255")||(q2>"0"&&q2<"1")) break;
                int l2=t.size();
                for(int i3=i2+1;i3<i2+4;i3++)
                {
                    if(i3>=s.size()-1) break;
                    string q1=s.substr(i2+1,i3-i2);
                    t+=s[i3]; t+='.';
                    if((q1.size()==3&&q1>"255")||(q1>"0"&&q1<"1")) break;
                    string t4=s.substr(i3+1,s.size()-i3-1);
                    if(t4.size()>3||(t4.size()==3&&t4>"255")||(t4>"0"&&t4<"1")) t.erase(t.size()-1);
                    else
                    {
                        t+=t4;
                        ans.push_back(t);
                        t.erase(t.size()-t4.size()-1);
                    }
                }
                t.erase(l2-1);
            }
            t.erase(l1-1);
        }
        return ans;
    }
};


原文地址:https://blog.csdn.net/Bigkinder/article/details/144410111

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!