在C ++中还原IP地址

假设我们有一个仅包含数字的字符串,我们必须通过返回所有可能的有效IP地址组合来恢复它。我们知道一个有效的IP地址正好由四个整数(每个整数在0到255之间)组成,并用单点分隔。

因此,如果输入类似于“ 25525511135”,则输出将为[“ 255.255.11.135”,“ 255.255.111.35”]

为了解决这个问题,我们将遵循以下步骤-

  • 定义一个函数convertToNum(),它将以s,start,end,

  • num:= 0

  • 对于初始化i:=开始,当i <=结束时,更新(将i增加1),请执行-

    • 回报10000

    • num:=(num * 10)+(s [i]-ASCII'0')

    • 如果num> 255,则-

    • 返回数字

    • 定义一个函数addDots(),它将占据位置,

    • res:=空字符串

    • x:= 0,posIndex:= 0

    • 对于初始化i:= 0,当i <头寸大小时,进行更新(将i增加1),执行-

      • res:= res连接“。”

      • num:=职位[i]

      • 创建一个字符串str1

      • temp:= num作为字符串

      • res:= res +温度

      • 如果i <头寸大小,则-

    • 返回资源

    • 定义一个函数solve(),它将取s,一个字符串数组结果,一个数组位置,dotCount,将其初始化为3,startIndex,将其初始化为0,

    • 如果不是dotCount为非零且((s的大小-1)-startIndex +1)1,则-

      • 将temp插入位置的末尾

      • res:= addDots(位置)

      • 如果res的大小与s的大小相同,则-

      • 在结果末尾插入res

      • temp:= convertToNum(s,startIndex,s的大小)

      • 如果temp> = 0且temp <= 255,则-

      • 返回

      • 对于初始化i:= startIndex,当i <s的大小时,更新(将i增加1),执行-

        • 将temp插入位置的末尾

        • 求解(s,结果,位置,dotCount-1,i + 1)

        • 从位置删除最后一个元素

        • temp:= convertToNum(s,startIndex,i)

        • 如果temp> = 0且temp <= 255,则-

      • 定义一个函数genIp,它将使用字符串s,

      • 定义数组结果

      • 定义数组位置

      • 解决(结果,位置)

      • 返回结果

      • 从主要方法调用genIp(A)

      例 

      让我们看下面的实现以更好地理解-

      #include <bits/stdc++.h>

      using namespace std;

      void print_vector(vector<auto> v){

         cout << "[";

         for(int i = 0; i<v.size(); i++){

            cout << v[i] << ", ";

         }

         cout << "]"<<endl;

      }

      typedef long long int lli;

      class Solution {

      public:

         lli convertToNum(string s,int start, int end){

            lli num = 0;

            for (int i = start; i <= end; i++) {

               num = (num * 10) + (s[i] - '0');

               if (num > 255)

                  return 10000;

            }

            return num;

      }

      string addDots(vector <int> positions){

         string res = "";

         int x = 0;

         int posIndex = 0;

         for (int i = 0; i < positions.size(); i++) {

            int num = positions[i];

            ostringstream str1;

            str1 << num;

            string temp = str1.str();

            res += temp;

            if (i < positions.size() - 1)

               res += ".";

         }

         return res;

      }

      void solve(string s, vector <string> &result,vector <int> positions, int dotCount = 3, int startIndex = 0){

         if (!dotCount && ((s.size() - 1) - startIndex + 1) >= 1) {

            int temp = convertToNum(s, startIndex, s.size() - 1);

            if (temp >= 0 && temp <= 255) {

               positions.push_back(temp);

               string res = addDots(positions);

               if (res.size() - 3 == s.size()) {

                  result.push_back(res);

               }

            }

            return;

         }

         for (int i = startIndex; i < s.size(); i++) {

            int temp = convertToNum(s, startIndex, i);

            if (temp >= 0 && temp <= 255) {

               positions.push_back(temp);

               solve(s, result, positions, dotCount - 1, i + 1);

               positions.pop_back();

            }

         }

      }

      vector<string> genIp(string s){

         vector<string> result;

         vector<int> position;

         solve(s, result, position);

         return result;

      }

      vector<string> restoreIpAddresses(string A) {

         return genIp(A);

      }};

      main(){

         Solution ob;

         print_vector(ob.restoreIpAddresses("25525511135"));

      }

      输入值

      "25525511135"

      输出结果

      [255.255.11.135, 255.255.111.35, ]

      以上是 在C ++中还原IP地址 的全部内容, 来源链接: utcz.com/z/348761.html

      回到顶部