隔了几天没写,唉思路速度都跟不上。果然这东西就是不能停

class Solution {
public:
    /**
     * 
     * @param s string字符串 
     * @return string字符串vector
     */
    vector<string> restoreIpAddresses(string s) {
      std::vector<std::string> res;
      //  找出三个点可能的位置三重循环暴力查找
      int length = s.size();
      
      //  注意是左闭右开,所以每一层指向的永远是下一层的第一个数字
      //  注意循环范围是 < 同样要考虑右开这一因素
      for (int i = 1; i < 4 && i < length - 2; ++i) {
        for (int j = i + 1; j < i + 4 && j < length - 1; ++j) {
          for (int k = j + 1; k < j + 4 && k < length; ++k) {
            //  最后的数字长度
            if (length - k > 3) {
              continue;
            }
            std::string a = s.substr(0, i);
            std::string b = s.substr(i, j - i);
            std::string c = s.substr(j, k - j);
            std::string d = s.substr(k);
            //  每部分的数字大小
            if (std::stoi(a) > 255 || std::stoi(b) > 255 || std::stoi(c) > 255 || std::stoi(d) > 255) {
              continue;
            }
            //  前导0的情况
            if (a.size() > 1 && a[0] == '0' || b.size() > 1 && b[0] == '0' || c.size() > 1 && c[0] == '0' || d.size() > 1 && d[0] == '0') {
              continue;
            }
            
            std::string tmp = a + "." + b + "." + c + "." + d;
            res.push_back(tmp);
          }
        }
      }
      
      return res;
    }
};