zoukankan      html  css  js  c++  java
  • LeetCode 93. 复原IP地址(Restore IP Addresses)

    题目描述

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

    示例:

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

    解题思路

    利用回溯法的思想,从字符串第一个字符开始,分别检查从当前字符开始的第1、2、3位组成的数,若该数符合要求即小于256则加入到结果IP中,然后再从当前数的后一位置递归向后寻找。若遍历到第四个数,则判断最后几位组成的数是否满足要求,符合则加入到最后的集合中。注意当遇到当前数的起始位是0时,仅将0加入到字符串中就停止当前数的寻找,因为以‘0’开头的任何字符串转化成的数都会去掉前面的‘0’

    代码

     1 class Solution {
     2 public:
     3     vector<string> restoreIpAddresses(string s) {
     4         vector<string> res;
     5         findIp(s, 0, 0, "", res);
     6         return res;
     7     }
     8     void findIp(string s, int f, int idx, string ip, vector<string> &res){
     9         if(idx == 3){
    10             if(s.size() - 1 - f < 3){
    11                 if(s[f] == '0' && f != s.size() - 1) return;
    12                 int num = stoi(s.substr(f, s.size() - f)); 
    13                 if(num < 256){
    14                     ip += to_string(num);
    15                     res.push_back(ip);
    16                 }
    17             }
    18         }
    19         else{
    20             for(int i = 1; i <= 3; i++){
    21                 if(f + i >= s.size()) break;
    22                 int num = stoi(s.substr(f, i));
    23                 if(num < 256)
    24                     findIp(s, f + i, idx + 1, ip + to_string(num) + ".", res);
    25                 if(s[f] == '0' && i == 1) break;
    26             }
    27         }
    28     }
    29 };
  • 相关阅读:
    Redis基础
    MySQL基础
    MySQL基础
    MySQL基础
    MySQL基础
    Hello 博客园
    Linux | 常用命令
    JVM | 性能调优
    JVM | 垃圾回收
    学习笔记 | 分布式技术
  • 原文地址:https://www.cnblogs.com/wmx24/p/9395946.html
Copyright © 2011-2022 走看看