1、题目描述

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

2、示例

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

3、题解

基本思想:递归回溯法,Ip地址总共由四部分组成,cnt计数已经加进来几部分了,当pos到尾且cnt=4,则是正确分割。Ip地址每一部分可能是一位数0-9,可能是两位数10-99,也可能是三位数100-255。

本代码为了代码简洁用到了很多字符串拼接、substr和erase,所以效率不是很高,最佳做法是s和cur都用引用降低内存消耗,并且都用push_back和pop_back降低执行时间,效率会高很多,但cur用引用注意最后不能pop_back最后一个'.',这是因为cur是引用可能前面的cur里面并没有字符所有pop_back溢出,需要在加'.'时判断如果已经加3个'.'了,就不加了。

#include<iostream>
#include<vector>
#include<algorithm>
#include<iterator>
using namespace std;
class Solution {
public:vector<string> res;vector<string> restoreIpAddresses(string s) {//基本思想:递归回溯法,Ip地址总共由四部分组成,cnt计数已经加进来几部分了,当pos到尾且cnt=4,则是正确分割//Ip地址每一部分可能是一位数0-9,可能是两位数10-99,也可能是三位数100-255if (s.size() > 12)return res;//cur为当前分割的一种情况,pos当前s下标,cnt计数string cur;Recursion(s, cur, 0, 0);return res;}void Recursion(string &s, string cur, int pos, int cnt){if (pos == s.size()){//当pos到尾且cnt=4,则是正确分割,否则返回if (cnt == 4){cur.pop_back();res.push_back(cur);}   return;}//Ip地址每一部分可能是一位数0-9cur += s.substr(pos, 1) + '.';Recursion(s, cur, pos + 1, cnt + 1);cur.erase(cur.size() - 2, 2);//Ip地址每一部分可能是两位数10-99if (pos + 1 < s.size() && s[pos] != '0'){cur += s.substr(pos, 2) + '.';Recursion(s, cur, pos + 2, cnt + 1);cur.erase(cur.size() - 3, 3);}//Ip地址每一部分可能是三位数100-255if (pos + 2 < s.size() && (s[pos] == '1'|| (s[pos]=='2' && s.substr(pos,3)<="255"))){cur += s.substr(pos, 3) + '.';Recursion(s, cur, pos + 3, cnt + 1);cur.erase(cur.size() - 4, 4);}return;}
};
int main()
{Solution solute;string s = "172162541";vector<string> res = solute.restoreIpAddresses(s);copy(res.begin(), res.end(), ostream_iterator<string>(cout, "\n"));return 0;
}

93复原IP地址(递归回溯法)相关推荐

  1. 93. 复原 IP 地址(回溯算法)

    给定一个只包含数字的字符串,用以表示一个 IP 地址,返回所有可能从 s 获得的 有效 IP 地址 .你可以按任何顺序返回答案. 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组 ...

  2. LeetCode 93. 复原IP地址(回溯)

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

  3. 力扣93 - 复原IP地址【回溯算法】

    回溯算法解决字符串分割问题 一.题目分析 题目描述 思路分析 二.代码的细究与详解 回溯三部曲 三.相似题目 四.总结与提炼 一.题目分析 原题链接 题目描述 有效 IP 地址 正好由四个整数(每个整 ...

  4. LeetCode 93. 复原 IP 地址【字符串,回溯算法】

    93. 复原 IP 地址 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔. 例如:"0.1.2.201" ...

  5. 93. 复原 IP 地址

    93. 复原 IP 地址 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔. 例如:"0.1.2.201" ...

  6. leetcode:491. 递增子序列、17. 电话号码的字母组合、31. 分割回文串、93. 复原 IP 地址(JavaScript)

    文章目录 491. 递增子序列 分析 去重 如何保证递增呢? 17. 电话号码的字母组合 思路: 单层递归逻辑 递归终止条件 完整代码 另一种写法 31. 分割回文串 思路:分析题目本题可分为两步 9 ...

  7. leetcode系列-93.复原 IP 地址

    leetcode系列–第93题.复原 IP 地址 题目描述:有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔.例如:" ...

  8. [Leetcode][第93题][JAVA][复原IP地址][剪枝][回溯]

    [问题描述][中等] [解答思路] 1. 递归 回溯剪枝 复杂度 class Solution {static final int SEG_COUNT = 4;List<String> a ...

  9. 142. Leetcode 93. 复原 IP 地址 (回溯算法-切割问题)

    分析剪枝条件: 1.一开始,字符串的长度小于 4 或者大于 12 ,一定不能拼凑出合法的 ip 地址(这一点可以一般化到中间结点的判断中,以产生剪枝行为); 2.每一个结点可以选择截取的方法只有 3 ...

  10. 多看看把,条件太多了--leetcode 93. 复原 IP 地址

    难度:中等 频次:62 题目: 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔. 例如:"0.1.2.201&quo ...

最新文章

  1. java正则表达式获取指定两个字符串之间内容
  2. php实现人员权限管理(用户界面)
  3. PAT 乙级 1009
  4. php生成svg图片不显示,css svg不显示不出来怎么办
  5. win32开发(调试)
  6. 老婆给我推荐了一个副业,现在收入高于我工资,我要不要辞职?
  7. hdu 4059 The Boss on Mars 容斥
  8. Python网络爬虫第一弹《Python网络爬虫相关基础概念》
  9. Windows系统服务器中安装Redis服务
  10. python爬取商品信息
  11. 【谨记】PCB画板子的正确步骤(说多了,都是泪啊!)
  12. 让coreseek支持拼音检索
  13. 保姆级 nas 服务器搭建手册
  14. C语言链表的删除代码实现
  15. 用python玩转视频帧率
  16. 开源任务管理平台TaskManager介绍
  17. C语言布斯乘法算法,布斯Booth算法带符号位的乘法verilog语言实现booth算法
  18. JavaScript 常见的设计模式
  19. CentOS7安装json格式化工具jq
  20. 计算机科学与技术优劣,计算机科学与技术专业优势多多

热门文章

  1. 东原服务器开机显示bb,启用tls后,服务器出现remote error: tls: bad certificate
  2. halcon 20.11.02 深度学习语义分割例程报错
  3. oracle start with connect by order siblings by用法
  4. 用canvas制作的躲避球小游戏html5源码
  5. ESP8266-Arduino编程实例-OPT3001数字环境光传感器
  6. 2020年6月——北京大学《软件工程》笔记
  7. 计算机夏令营英语面试,2016北航计算机夏令营的经验
  8. springboot打包错误:Failed to execute goal org.apache.maven.pluginsmaven-resources-plugin3.2.0
  9. java 新浪短网址生成器_新浪短网址链接生成器 2020最新新浪t.cn短链接在线生成接口推荐...
  10. 50部经典烧脑大片,看懂是个问题,敢不敢看是另一个问题!