leetcode(93):复原IP地址

题目93:
leetcode(93):复原IP地址_第1张图片

1.解题思路

首先看到该题,第一反应是dfs+回溯,第二反应就是可不可以用动规。第三反应就是暴力求解:反正就是4~12个数,往里面插入点,分为三坨;复杂度也应该不是很高;


直接循环提交后会发现特殊情况:‘010010’的处理;‘00’要写成‘0’,‘010’是不合理的;
还需要额外处理这两个额外情况;
初步反应两个方法:

  1. 对处理后的string进行修正,再加一个修补函数,所要处理的问题,就是“删掉字符串中的’010’类型和将‘00’等多个0的情景减少为1个0"
  2. string -> int -> string 后的不同进行比较;
    010 -> 10 -> 10
    000 -> 0 ->0
    那么此时的check函数就非常多余了,本来就没实现什么大的功能,这里可以将方法2添加进函数check里面;

 vector<string> restoreIpAddresses(string s) {
        
              vector<string> res;
              if(s.size()==0)
            return res;
        string a, b, c, d;
        for(int i=1;i<=3;i++)
        {
            a = s.substr(0, i);
            a= to_string(stoi(a));
            if(!check(a) ) //如果割除来的数不合理 i++ 
                continue;
            for(int j = 1;i+j<s.size() && j<=3;j++) 
            {
                b = s.substr(i, j);
                b= to_string(stoi(b));
                if(!check(b)) //如果割除来的数不合理 i++ 
                    continue;
                for(int m=1;i+j+m<s.size() && m<=3  ;m++)
                {
                    c = s.substr(i + j, m);
                    c= to_string(stoi(c));
                    if(!check(c)) //如果割除来的数不合理 i++
                        continue;
                    if(i+j+m +3>=s.size()) //检查剩余的
                    {
                        d = s.substr(i+j+m,s.size()-(i+j+m));
                        d= to_string(stoi(d));
                        if(!check(d)) //如果割除来的数不合理 i++
                            continue;
                        string temp = a + '.' + b + '.' + c + '.' + d;
                        if(temp.size()==s.size()+3){
                        //temp = temp.insert(n,1,'.');
                        res.push_back(temp);
                        }
                    }
                }
            }
        }
        return res;

        
    }
    
    bool check(string s) //s分num坨
    {
        if(s.size()==0)
            return true;
        if(stoi(s) >255 || stoi(s) < 0)
            return false;
        return true;
    }
    

你可能感兴趣的:(leetcode)