• 力扣算法题—093复原IP地址


    给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。

    示例:

    输入: "25525511135"
    输出: ["255.255.11.135", "255.255.111.35"]


     1 //暴力搜索
     2 //一共分为4组
     3 //每组数据不超过三位
     4 class Solution {
     5 public:
     6     vector<string> restoreIpAddresses(string s) {
     7         vector<string>res;
     8         for(int a = 1; a<4;++a)
     9             for(int b=1;b<4;++b)
    10                 for(int c =1;c<4;++c)
    11                     for(int d=1;d<4;++d)
    12                         if (a + b + c + d == s.size()) {
    13                             int A = stoi(s.substr(0, a));//取子串并转为数组
    14                             int B = stoi(s.substr(a, b));
    15                             int C = stoi(s.substr(a+b, c));
    16                             int D = stoi(s.substr(a+b+c, d));
    17                             if (A <= 255 && B <= 255 && C <= 255 && D <= 255) {
    18                                 string str = to_string(A) + "." + to_string(B) + "." + to_string(C) + "." + to_string(D);
    19                                 if (str.size() == (s.size() + 3))//去除010这种组合
    20                                     res.push_back(str);
    21                             }
    22                         }
    23         return res;
    24 
    25     }
    26 };
    27 
    28 
    29 //使用递归
    30 class Solution {
    31 public:
    32     vector<string> restoreIpAddresses(string s) {
    33         vector<string>res;
    34         helper(s, 0, "",res);
    35         return res;
    36     }
    37     void helper(string s, int n, string out, vector<string>&res) {
    38         if (n == 4) {
    39             if (s.empty())res.push_back(out);//全部组合4组IP完毕
    40         }
    41         else {
    42             for (int k = 1; k < 4; ++k) {
    43                 if (s.size() < k)break;
    44                 int val = stoi(s.substr(0, k));//取子串转化为数字
    45                 if (val > 255 || k != to_string(val).size())//当数字大于255或出现010,不满足
    46                     continue;
    47                 helper(s.substr(k), n + 1, out + s.substr(0, k) + (n == 3 ? "" : "."), res);
    48             }
    49         }
    50     }
    51 };
  • 相关阅读:
    动态规划法(八)最大子数组问题(maximum subarray problem)
    动态规划法(九)想要更多例子?
    动态规划法(五)钢条切割问题(rod cutting problem)
    MySql排序函数
    Mysql 分组函数查询
    MySql单行函数
    MySql常见的函数
    MySql常见的条件查询
    MySql的一些基础查询
    MySql资料总全
  • 原文地址:https://www.cnblogs.com/zzw1024/p/10787627.html
Copyright © 2020-2023  润新知