复原IP地址(力扣93)

news/2025/2/9 5:45:32 标签: leetcode, 算法, 职场和发展

有了上一道题分割字符串的基础,这道题理解起来就会容易很多。相同的思想我就不再赘述,在这里我就说明一下此题额外需要注意的点。首先是终止条件如何确定,上一题我们递归到超过字符串长度时,则说明字符串已经分割完毕,而这道题根据题意,相当与用‘.’来分割字符串,且出现三个点时就可以结束递归了,那么我们需要一个变量来记录点的个数。另外,在我们判断分割出来的子串是否合法时,最后出现的子串可能为空串,就是说第三个点之后没有数字了。那么我么单独写一个判断来处理这种特殊情况。这是一些注意的重点,其他细节比较好懂,大家可以结合我下面的代码及详细注释理解此题。

代码及详细注释如下:

class Solution {
public:
    vector<string> result;//存放有效IP地址
    bool isValid(string& s,int start,int end){
        //空串的判断特殊处理
         if (start > end) {
            return false;
        }
        //一般情况
      if(s[start] == '0' && start != end){
        return false;
      }
      int sum = 0;
      for(int i = start;i <= end;i++){
        sum = sum * 10 + (s[i] - '0');
      }
      if(sum > 255) return false;
      return true;
   }
    void backtracking(string& s,int startIndex,int pointNum){
        //终止条件
        if(pointNum == 3){
            //最后一段子串要记得处理
            if(isValid(s,startIndex,s.size() - 1)){
                result.push_back(s);
            }
          return;
        }
        for(int i = startIndex;i < s.size();i++){
            //如果当前分割的子串合法,则进行递归,否则继续向后遍历分割位置
            if(isValid(s,startIndex,i)){
                s.insert(s.begin() + i + 1,'.');//插入点,表示分割
                pointNum++;
                backtracking(s,i + 2,pointNum);//递归分割其余子串
                //回溯
                pointNum--;
                s.erase(s.begin() + i + 1);
            }else break;
        }
        return;
    }
    vector<string> restoreIpAddresses(string s) {
          if(s.size() < 4 || s.size() > 12){
            return result;
          }
          backtracking(s,0,0);
          return result;
    }
};


 


http://www.niftyadmin.cn/n/5845609.html

相关文章

如果一个服务器突然间变的很卡,该如何排查?

1. 检查资源使用情况 CPU 使用率&#xff1a;使用命令 top 或 htop&#xff08;Linux 系统&#xff09;查看 CPU 使用情况。如果 CPU 使用率接近 100%&#xff0c;可能是某个进程消耗了过多的 CPU 资源。 内存使用率&#xff1a;查看内存的使用情况&#xff0c;如果内存接近或超…

mysql8 从C++源码角度看sql生成抽象语法树

MySQL 8的C源码中&#xff0c;SQL语句的词法分析和语法分析是通过一个复杂的解析器实现的&#xff0c;这个解析器将输入的SQL文本转换成抽象语法树&#xff08;AST&#xff09;。以下是该过程的主要步骤和相关组件&#xff1a; 主要组件 Lexer (词法分析器): MySQL使用了一个称…

C++ 23 的栈踪迹库(stacktrace)

1 Boost.Stacktrace ​ 当程序发生错误的时候&#xff0c;能提供的信息越多&#xff0c;对错误的定位就越有利。C#、Pyrhon、Java 等编程语言都提供调用栈踪迹回溯的功能&#xff0c;在错误发生的时候&#xff0c;除了报告错误发生的位置&#xff0c;还能输出函数调用栈信息。…

大模型推理——MLA实现方案

1.整体流程 先上一张图来整体理解下MLA的计算过程 2.实现代码 import math import torch import torch.nn as nn# rms归一化 class RMSNorm(nn.Module):""""""def __init__(self, hidden_size, eps1e-6):super().__init__()self.weight nn.Pa…

Qt实现简易视频播放器

使用Qt6实现简易音乐播放器&#xff0c;效果如下&#xff1a; github&#xff1a; Gabriel-gxb/VideoPlayer: qt6实现简易视频播放器 一、整体架构 该代码整体架构围绕着MainWindow类构建一个媒体播放器相关的应用程序。 主要组件 &#xff08;一&#xff09;界面组件&…

携手AWS,零成本在EKS上体验AutoMQ企业版

01 前言 AutoMQ是一款贯彻云优先理念来设计的 Kafka 替代产品。AutoMQ 创新地对 Apache Kafka 的存储层进行了基于云的重新设计&#xff0c;在 100% 兼容 Kafka 的基础上通过将持久性分离至 EBS 和 S3 带来了 10x 的成本降低以及 100x 的弹性能力提升&#xff0c;并且相比 Apa…

springcloud gateway 负载均衡

Spring Cloud Gateway的负载均衡是Spring Cloud生态系统中一个非常重要的功能&#xff0c;它使得微服务架构中的服务调用能够更加高效和均衡。以下是关于Spring Cloud Gateway负载均衡的详细解析&#xff1a; 一、Spring Cloud Gateway简介 Spring Cloud Gateway是一个基于Sp…

使用 Apifox、Postman 测试 Dubbo 服务,Apache Dubbo OpenAPI 即将发布

作者&#xff1a;何亮&#xff0c;Apache Dubbo Contributor Apache Dubbo OpenAPI 简介 设计背景 在微服务体系中&#xff0c;RPC 服务的文档管理、测试、调用协作一直都是影响研发效能的关键一环&#xff0c;这些难题通常是由于 RPC 的特性所决定的&#xff1a;RPC 服务的…