zoukankan      html  css  js  c++  java
  • LeetCode-Restore IP Addresses

    哎,写代码太不专注了,

    还是头脑和注意力不够集中,

    需要多在脑子里面磨练,

    另外写程序的思维方式还比较土,

    总喜欢单独考虑很多特殊情况,导致代码看起来很繁琐,

    需要多看别人的代码好好学习如何写得简洁短小;

     1 class Solution {
     2 public:
     3     vector<string> restoreIpAddresses(string s) {
     4         // Start typing your C/C++ solution below
     5         // DO NOT write int main() function
     6         vector<string> res;
     7         if (s.empty() || s.size() < 4 || s.size() > 12) {
     8             return res;
     9         }
    10         vector<string> ip;
    11         get(res, ip, s, 0, 0);
    12         return res;
    13     }
    14     void get(vector<string> &res, vector<string> &ip, string &s, int p, int num) {
    15         if (num == 3) {
    16             if (s.size() - p > 3) {
    17                 return;
    18             }
    19             if (s[p] == '0' && p != s.size() - 1) {
    20                 return;
    21             }
    22             int n = 0;
    23             for (int i = p; i < s.size(); ++i) {
    24                 n = n * 10 + s[i] - '0';
    25             }
    26             if (n > 255) {
    27                 return;
    28             }
    29             string ipstr = s.substr(p, s.size() - p + 1);
    30             string ret = ip[0] + "." + ip[1] + "." + ip[2] + "." + ipstr;
    31             res.push_back(ret);
    32             return;
    33         }
    34         if (s[p] == '0') {
    35             ip.push_back(s.substr(p, 1));
    36             int len = s.size() - p - 1;
    37             int t = 3 - num;
    38             if (len < t || len > 3 * t) {
    39                 return;
    40             }
    41             get(res, ip, s, p + 1, num + 1);
    42         }
    43         else {
    44             for (int i = 0; i < 3; ++i) {
    45                 vector<string> nvec = ip;
    46                 nvec.push_back(s.substr(p, i + 1));
    47                 int len = s.size() - p - 1 - i;
    48                 int t = 3 - num;
    49                 if (len < t || len > 3 * t) {
    50                     continue;
    51                 }
    52                 if (i == 2) {
    53                     int temp = 100 * (s[p] - '0') + 10 * (s[p + 1] - '0') + (s[p + 2] - '0');
    54                     if (temp > 255) {
    55                         continue;
    56                     }
    57                 }
    58                 get(res, nvec, s, p + i + 1, num + 1);
    59             }
    60         }
    61     }
    62 };
  • 相关阅读:
    July 08th. 2018, Week 28th. Sunday
    July 07th. 2018, Week 27th. Saturday
    兄弟组件bus传值
    vue 父子组件传值
    路由传值的三种方式
    jQuery 操作表格
    原生js实现开关功能
    跨域解决方法
    正则判断密码难度
    cookie封装函数
  • 原文地址:https://www.cnblogs.com/chasuner/p/restoreipaddresses.html
Copyright © 2011-2022 走看看