• 复原IP地址-DFS


    dfs递归枚举每个点分片段的数字是否合法

    class Solution {
      public:
          bool isValid(string ip)
          {
              int val = stoi(ip);
              if (val > 255)    
                  return false;
              if (ip.size() >= 2 && ip[0] == '0')
                  return false;
              return true;
          }
          void dfs(string& s, int pos, vector<string> &path, vector<string>& res)
          {
              //首先判断剩余的位数,是不是还能满足要求,比如25525511135,若2.5.5.25511135显然不满足,这可以预判
              int maxLen = (4 - path.size()) * 3;
    
              if (s.size() - pos > maxLen)    
                  return;
              //递归出口
              if (path.size() == 4 && pos == s.size()) {
                  string ans = "";
                  for (int i = 0; i < 4; ++i) {
                      ans += path[i];
                      if (i != 3)    
                          ans += ".";
                  }
                  res.push_back(ans);
                  return;
              }
              //一个片段最多包含三个字符
              for (int i = pos; i < s.size() && i <= pos + 2; ++i) {
                  string ip = s.substr(pos, i - pos + 1);
                  //判断提取的字符片段是否合法
                  if (!isValid(ip))    
                      continue;
                  path.push_back(ip);
                  dfs(s, i + 1, path, res);
                  //回溯、删除最后一个元素
                  path.pop_back();
              }
          }
          vector<string> restoreIpAddresses(string s)
          {
              //找3个.的位置,每个.之前组成的的数值必须要小于255,且以0开头的除非数字是0本身,否则也是非法
              vector<string> res;
              if (s.size() == 0 || s.size() < 4)    
                  return res;
              //path保存分成四组的字符串
              vector<string> path;
              dfs(s, 0, path, res);
              return res;
          }
      };
  • 相关阅读:
    TOJ5272: 逆矩阵
    TOJ4537: n阶行列式
    gym101532 2017 JUST Programming Contest 4.0
    Float(浮动)
    块级元素与行级元素
    MyBatis-Oracle生成主键,嵌套对象中的List增加
    MyBatis嵌套对象中的List查询
    dbcp properties
    Idea菜单字体大小调整
    DOM4J
  • 原文地址:https://www.cnblogs.com/-citywall123/p/12882238.html
Copyright © 2020-2023  润新知