[Leetcode] restore ip address 存储IP地址
Given a string containing only digits, restore it by returning all possible valid IP address combinations.
For example:
Given"25525511135",
return["255.255.11.135", "255.255.111.35"]. (Order does not matter)
题意:给定一由纯数字组成的字符串,以IP地址的形式存储。
思路:首先要明白IP地址的书写形式。IP地址由32位二进制数组成,常以XXX.XXX.XXX.XXX形式表现,每组XXX代表小于或等于255的10进制数,故IP地址总共有四段,每一段可能有一到三位,范围是[0, 255],题目明确指出输入字符串只含有数字。
两点要注意:一、当某段是三位时,我们要判断其是否越界(>255);二、当只有一位时,0可以成某一段,如果有两位或三位时,像 00, 01, 001, 011, 000等都是不合法的。
可以看做是字符串的分段问题,在输入字符串中加入三个点,将字符串分为四段,每一段都要是合法的(条件见上面两点)。使用递归法,我们用k来表示当前还需要分的段数,终止条件是当如果k = 0(则表示三个点已经加入完成,四段已经形成),若这时字符串刚好为空即s.empty(),这种个字符串是合法的。若k != 0, 则对于每一段,我们分别用一位,两位,三位来尝试,分别判断其合不合法,如果合法,则调用递归继续分剩下的字符串,最终和求出所有合法组合。
参考了Grandyang的博客。代码如下:
class Solution {
public:
vector<string> restoreIpAddresses(string s)
{
vector<string> res;
restore(s,res,,"");
return res;
} void restore(string s,vector<string> &res,int k,string str)
{
if(k==&&s.empty())
res.push_back(str);
else
{
for(int i=;i<;++i)
{
if(s.size()>=i&&isValid(s.substr(,i)))
{
if(k==)
restore(s.substr(i),res,k-,str+s.substr(,i));
else
restore(s.substr(i),res,k-,str+s.substr(,i)+".");
}
}
}
} bool isValid(string s)
{
if(s.size()>||s.empty()||(s.size()>&&s[]==''))
return false;
int val=atoi(s.c_str());
return val>=&&val<=;
}
};
可以将第20~23行简写为如下:
restore(s.substr(i),k-,str+s.substr(,i)+(k==?"":"."),res);
[Leetcode] restore ip address 存储IP地址的更多相关文章
- [LeetCode] Validate IP Address 验证IP地址
In this problem, your job to write a function to check whether a input string is a valid IPv4 addres ...
- [LintCode] Restore IP Address 复原IP地址
Given a string containing only digits, restore it by returning all possible valid IP address combina ...
- 华东师大OJ:IP Address【IP地址转换】
/*===================================== IP Address Time Limit:1000MS Memory Limit:30000KB Total Subm ...
- 468 Validate IP Address 验证IP地址
详见:https://leetcode.com/problems/validate-ip-address/description/ Java实现: class Solution { public St ...
- Windows Azure Cloud Service (44) 将Cloud Service加入Virtual Network Subnet,并固定Virtual IP Address(VIP)
<Windows Azure Platform 系列文章目录> 在之前的文章中,笔者已经详细介绍了如何将Virtual Machine加入Virtual Network,并且绑定固定的Pr ...
- VIP - virtual IP address
virtual IP address (虚拟 IP 地址)1.是集群的ip地址,一个vip对应多个机器2.与群集关联的唯一 IP 地址 see wiki: A virtual IP address ( ...
- LeetCode OJ:Restore IP Addresses(存储IP地址)
Given a string containing only digits, restore it by returning all possible valid IP address combina ...
- [LeetCode] Restore IP Addresses 复原IP地址
Given a string containing only digits, restore it by returning all possible valid IP address combina ...
- LeetCode:Restore IP Address
93. Restore IP Addresses Given a string containing only digits, restore it by returning all possible ...
随机推荐
- <cfloat> (float.h)
头文件: <cfloat> (float.h) 浮点类型的特性 这个头文件为特殊系统和编译器的实现描述了浮点类型的特征. 一个浮点数包含四个元素: 一个标志(a sign):正或负; 一个 ...
- 【Linux 运维】linux系统关机、重启、注销命令
linux 关机.重启.注销命令: 关机命令: shutdown -h now 立刻关机(生产常用) shutdown -h +1 一分钟后关机 ( shutdown -c 可以将 ...
- 饥饿的小易(枚举+广度优先遍历(BFS))
题目描述 小易总是感觉饥饿,所以作为章鱼的小易经常出去寻找贝壳吃.最开始小易在一个初始位置x_0.对于小易所处的当前位置x,他只能通过神秘的力量移动到 4 * x + 3或者8 * x + 7.因为使 ...
- 【C#】arcface人脸识别使用问题分析
arcface上线了新版 正好有空 赶紧下载体验了一番 凡是过程中也遇到一些问题 1.初始化 [DllImport("libarcsoft_face_engine.dll", En ...
- [问题] docker: Failed to start Docker Application Container Engine.
docker无法启动: # systemctl restart docker Job for docker.service failed because the control process exi ...
- GRU-CTC中文语音识别
目录 基于keras的中文语音识别 音频文件特征提取 文本数据处理 数据格式处理 构建模型 模型训练及解码 aishell数据转化 该项目github地址 基于keras的中文语音识别 该项目实现了G ...
- Linux中常用的关机和重新启动命令
hutdown.halt.reboot以及init,它们都可以达到关机和重新启动的目的,但是每个命令的内部工作过程是不同的,下面将逐一进行介绍. 一.shutdown shutdown命令用于安全关闭 ...
- 迭代器类型:iterator & const_iterator
vector<int> ivec{1, 3, 4, 1, 3, 4}; vector<int>::iterator iter; // iter能读写vector<int& ...
- “Hello World!”团队召开的第十二次会议
今天是我们团队“Hello World!”团队召开的第十二次会议.博客内容: 一.会议时间 二.会议地点 三.会议成员 四.会议内容 五.todo list 六.会议照片 七.燃尽图 一.会议时间 2 ...
- Thunder团队第五周 - Scrum会议5
Scrum会议5 小组名称:Thunder 项目名称:i阅app Scrum Master:翟宇豪 工作照片: 杨梓瑞同学在拍照,所以不在照片内. 参会成员: 王航:http://www.cnblog ...