题目描述

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

示例:

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

解题思路

利用回溯法的思想,从字符串第一个字符开始,分别检查从当前字符开始的第1、2、3位组成的数,若该数符合要求即小于256则加入到结果IP中,然后再从当前数的后一位置递归向后寻找。若遍历到第四个数,则判断最后几位组成的数是否满足要求,符合则加入到最后的集合中。注意当遇到当前数的起始位是0时,仅将0加入到字符串中就停止当前数的寻找,因为以‘0’开头的任何字符串转化成的数都会去掉前面的‘0’

代码

 class Solution {
public:
vector<string> restoreIpAddresses(string s) {
vector<string> res;
findIp(s, , , "", res);
return res;
}
void findIp(string s, int f, int idx, string ip, vector<string> &res){
if(idx == ){
if(s.size() - - f < ){
if(s[f] == '' && f != s.size() - ) return;
int num = stoi(s.substr(f, s.size() - f));
if(num < ){
ip += to_string(num);
res.push_back(ip);
}
}
}
else{
for(int i = ; i <= ; i++){
if(f + i >= s.size()) break;
int num = stoi(s.substr(f, i));
if(num < )
findIp(s, f + i, idx + , ip + to_string(num) + ".", res);
if(s[f] == '' && i == ) break;
}
}
}
};
05-20 02:45