做题思路or感想

这种字符串切割的问题都可以用回溯法来解决

递归三部曲:

  • 递归参数

    • 因为要切割字符串,所以要用一个startIndex来控制子串的开头位置,即是会切割出一个范围是[startIndex, i]的子串
  • 递归中止条件

    • 这里因为IP地址有正好四个整数(子串)构成,所以当切割的子串数量为4时就可以了。然后因为这四个子串组合起来要正好是主串,所以还需要startIndex超过主串的最后一位,即s.size() - 1才行
  • 递归单层逻辑

    • 判断子串是否符合条件,符合后便把子串放入vector<string>
  • 判断条件

    1. 不能有前导0
    2. 子串长度不超过3
    3. 不能有除了数字外的其他字符
    4. 子串转化成的数字范围要在[0, 255]
class Solution {
public:
vector<string>result;
vector<string>temp;
bool isGood(string s, int startIndex, int i) {
//子串长度限制
if (i - startIndex + 1 >= 4)return false;
string str = s.substr(startIndex, i - startIndex + 1);
//由子串转化成的数字的范围的限制
if (0 > stoi(str) || stoi(str) > 255)return false;
//前导0的限制
if (str.size() > 1 && str[0] == '0')return false;
//非法字符的限制
for (int j = 0; j < str.size(); j++) {
if (str[j] >= '0' && str[j] <= '9')continue;
else return false;
}
return true;
}
void dfs(string s, int startIndex) {
//递归中止条件
if (temp.size() == 4 && startIndex >= s.size()) {
string str;
//需要把子串拿出来做一点加工后再放到result中!!!
for (int i = 0; i < temp.size(); i++) {
if (i != temp.size() - 1) {
str = str + temp[i] + ".";
} else {
str = str + temp[i];
}
}
result.push_back(str);
return;
}
for (int i = startIndex; i < s.size(); i++) {
if (isGood(s, startIndex, i)) {
string str = s.substr(startIndex, i - startIndex + 1);
temp.push_back(str);
dfs(s, i + 1);
temp.pop_back(); //回溯
}
}
}
vector<string> restoreIpAddresses(string s) {
dfs(s, 0);
return result;
}
};

93. 复原 IP 地址的更多相关文章

  1. Java实现 LeetCode 93 复原IP地址

    93. 复原IP地址 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 示例: 输入: "25525511135" 输出: ["255.255.11. ...

  2. leetcode刷题-93复原IP地址

    题目 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 有效的 IP 地址正好由四个整数(每个整数位于 0 到 255 之间组成),整数之间用 '.' 分隔. 示例: 输入: &q ...

  3. leetcode 93 复原IP地址

    IP地址,分成四段,每段是0-255,按照每段的长度分别为1,2,3下一段长度分别1,2,3再下一段......进行递归遍历,能满足条件的假如res中.比较难想到的就是假如有一段是三位的010是不符合 ...

  4. 93复原IP地址。

    from typing import List# 这道题不是很难,但是限制条件有很多.# 用递归的方法可以很容易的想到.只需要四层递归就好了.# 每次进行加上限制条件.过滤每一层就好了..class ...

  5. LeetCode 93. 复原IP地址(Restore IP Addresses)

    题目描述 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 示例: 输入: "25525511135" 输出: ["255.255.11.135&qu ...

  6. 93. 复原IP地址

    题目描述: 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 示例: 输入: "25525511135" 输出: ["255.255.11.135&q ...

  7. LeetCode:复原IP地址【93】

    LeetCode:复原IP地址[93] 题目描述 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 示例: 输入: "25525511135" 输出: [&qu ...

  8. [LeetCode] Restore IP Addresses 复原IP地址

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

  9. LeetCode(93): 复原IP地址

    Medium! 题目描述: 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 示例: 输入: "25525511135" 输出: ["255.255. ...

随机推荐

  1. php ajax 修改,删除,添加(学做)

  2. 编译OneAPI(支持Nvidia显卡)

    开始使用DPC++ 官方安装教程 预备条件 请确保当前开发环境满足如下条件: git cmake版本需要满足3.14及以上. python版本3.6以上的python. nijia版本1.8及以上(使 ...

  3. CF1601C题解

    赛时一小时,赛后十分钟. 题意:给定一个序列 \(a\) 和一个集合 \(b\),问将 \(b\) 中所有元素插入 \(a\) 后逆序对最少是多少. 观察样例解释,发现 \(b\) 已经被排序过了,于 ...

  4. 基于python 实现KNN 算法

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/11/7 14:50 # @Author : gylhaut # @Site ...

  5. python学习之scipy实战1(积分用法)

    import numpy as np def main(): #1-- Integral积分 from scipy.integrate import quad, dblquad, nquad prin ...

  6. Apple macOS Mojave Intel Graphics Driver组件任意代码执行漏洞

    受影响系统:Apple macOS Mojave 10.14.5描述:CVE(CAN) ID: CVE-2019-8629 Apple macOS Mojave是苹果公司Mac电脑系列产品的操作系统. ...

  7. Redhat7 安装 yum源(亲测有效)

    由于之前安装Redhat7 想安装vsftpd  使用yum   install vsftpd 报错: This system is not registered to Red Hat Subscri ...

  8. 【OpenHarmony移植案例与原理】XTS子系统之应用兼容性测试用例开发

    摘要:本文主要介绍ACTS应用兼容性测试用例开发编译. 本文分享自华为云社区<移植案例与原理 - XTS子系统之应用兼容性测试用例开发>,作者: zhushy . XTS(X Test S ...

  9. 自动化运维之SaltStack初探

    1.1.基础环境 linux-node1(master服务端) 192.168.31.46 CentOS 6.6 X86_64 linux-node2(minion客户端) 192.168.31.47 ...

  10. Python的安装与开发环境的选用

    2021快要结束了,这一年我依旧深耕于python的广阔土壤,将重点放在机器人和传感器的角度.也收获了一大批正在学习和期望学习python的朋友. 正在学习的暂且不言,这篇主要是写给期望学习的朋友,同 ...