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

    题目链接

    Given a string containing only digits, restore it by returning all possible valid IP address combinations.

    For example:
    Given "25525511135",

    return ["255.255.11.135", "255.255.111.35"]. (Order does not matter)

    分析:按照dfs的方式递归的计算,具体见代码注释                                                                                                                            本文地址

     1 class Solution { 
     2 public:
     3     vector<string> restoreIpAddresses(string s) {
     4         // IMPORTANT: Please reset any member data you declared, as
     5         // the same Solution instance will be reused for each test case.
     6         vector<string> res;
     7         string tmpres;
     8         restoreIpAddressesRecur(s, 0, 4, tmpres, res);
     9         return res;
    10     }
    11     //从s的start位置开始计算,ip地址还需要num个域(共4个域)
    12     //tmpres表示当前计算好的部分ip
    13     void restoreIpAddressesRecur(string &s, int start, int num, 
    14         string &tmpres, vector<string> &res)
    15     {
    16         int len = s.size();
    17         if(num == 0)
    18         {
    19             if(start == len)//已经计算好了一个ip
    20             {
    21                 tmpres.erase(--tmpres.end());//去掉最后的“.”
    22                 res.push_back(tmpres);
    23                 tmpres.push_back('.');
    24             }
    25             return;
    26         }
    27         //不满足最小或最大长度关系
    28         if(len - start < num || len - start > num*3)return;
    29         int tmplen = tmpres.size();
    30         string tmpstr;
    31         for(int i = 1; i <= 3 && start + i <= len; i++)
    32         {//ip地址的一个域最多包含三个数字
    33             if(validRegion(s, start, start+i-1) == false)continue;
    34             tmpstr = s.substr(start, i) + ".";
    35             tmpres += tmpstr;
    36             restoreIpAddressesRecur(s, start+i, num-1, tmpres, res);
    37             tmpres.erase(tmplen, i+1);
    38         }
    39     }
    40     //判断ip地址的一个域是否合法
    41     bool validRegion(string &s, int istart, int iend)
    42     {
    43         if(iend > istart && s[istart] == '0')return false;
    44         int res = 0;
    45         for(int i = istart; i <= iend; i++)
    46             res = res*10 + (s[i] - '0');
    47         if(res >= 0 && res <= 255)return true;
    48         else return false;
    49     }
    50 };

    【版权声明】转载请注明出处:http://www.cnblogs.com/TenosDoIt/p/3448588.html

  • 相关阅读:
    第三章 AOP
    第二章 IoC
    第一章 Spring 概述
    框架整合
    后台管理工程搭建
    技术架构
    淘淘商城简介
    电商行业背景
    前言
    FutureTask的使用
  • 原文地址:https://www.cnblogs.com/TenosDoIt/p/3448588.html
Copyright © 2011-2022 走看看