93复原IP地址(递归回溯法)
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地址(递归回溯法)相关推荐
- 93. 复原 IP 地址(回溯算法)
给定一个只包含数字的字符串,用以表示一个 IP 地址,返回所有可能从 s 获得的 有效 IP 地址 .你可以按任何顺序返回答案. 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组 ...
- LeetCode 93. 复原IP地址(回溯)
1. 题目 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 示例: 输入: "25525511135" 输出: ["255.255.11.135&q ...
- 力扣93 - 复原IP地址【回溯算法】
回溯算法解决字符串分割问题 一.题目分析 题目描述 思路分析 二.代码的细究与详解 回溯三部曲 三.相似题目 四.总结与提炼 一.题目分析 原题链接 题目描述 有效 IP 地址 正好由四个整数(每个整 ...
- LeetCode 93. 复原 IP 地址【字符串,回溯算法】
93. 复原 IP 地址 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔. 例如:"0.1.2.201" ...
- 93. 复原 IP 地址
93. 复原 IP 地址 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔. 例如:"0.1.2.201" ...
- leetcode:491. 递增子序列、17. 电话号码的字母组合、31. 分割回文串、93. 复原 IP 地址(JavaScript)
文章目录 491. 递增子序列 分析 去重 如何保证递增呢? 17. 电话号码的字母组合 思路: 单层递归逻辑 递归终止条件 完整代码 另一种写法 31. 分割回文串 思路:分析题目本题可分为两步 9 ...
- leetcode系列-93.复原 IP 地址
leetcode系列–第93题.复原 IP 地址 题目描述:有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔.例如:" ...
- [Leetcode][第93题][JAVA][复原IP地址][剪枝][回溯]
[问题描述][中等] [解答思路] 1. 递归 回溯剪枝 复杂度 class Solution {static final int SEG_COUNT = 4;List<String> a ...
- 142. Leetcode 93. 复原 IP 地址 (回溯算法-切割问题)
分析剪枝条件: 1.一开始,字符串的长度小于 4 或者大于 12 ,一定不能拼凑出合法的 ip 地址(这一点可以一般化到中间结点的判断中,以产生剪枝行为); 2.每一个结点可以选择截取的方法只有 3 ...
- 多看看把,条件太多了--leetcode 93. 复原 IP 地址
难度:中等 频次:62 题目: 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔. 例如:"0.1.2.201&quo ...
最新文章
- java正则表达式获取指定两个字符串之间内容
- php实现人员权限管理(用户界面)
- PAT 乙级 1009
- php生成svg图片不显示,css svg不显示不出来怎么办
- win32开发(调试)
- 老婆给我推荐了一个副业,现在收入高于我工资,我要不要辞职?
- hdu 4059 The Boss on Mars 容斥
- Python网络爬虫第一弹《Python网络爬虫相关基础概念》
- Windows系统服务器中安装Redis服务
- python爬取商品信息
- 【谨记】PCB画板子的正确步骤(说多了,都是泪啊!)
- 让coreseek支持拼音检索
- 保姆级 nas 服务器搭建手册
- C语言链表的删除代码实现
- 用python玩转视频帧率
- 开源任务管理平台TaskManager介绍
- C语言布斯乘法算法,布斯Booth算法带符号位的乘法verilog语言实现booth算法
- JavaScript 常见的设计模式
- CentOS7安装json格式化工具jq
- 计算机科学与技术优劣,计算机科学与技术专业优势多多
热门文章
- 东原服务器开机显示bb,启用tls后,服务器出现remote error: tls: bad certificate
- halcon 20.11.02 深度学习语义分割例程报错
- oracle start with connect by order siblings by用法
- 用canvas制作的躲避球小游戏html5源码
- ESP8266-Arduino编程实例-OPT3001数字环境光传感器
- 2020年6月——北京大学《软件工程》笔记
- 计算机夏令营英语面试,2016北航计算机夏令营的经验
- springboot打包错误:Failed to execute goal org.apache.maven.pluginsmaven-resources-plugin3.2.0
- java 新浪短网址生成器_新浪短网址链接生成器 2020最新新浪t.cn短链接在线生成接口推荐...
- 50部经典烧脑大片,看懂是个问题,敢不敢看是另一个问题!