题目描述
给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。
示例
输入: "25525511135" 输出:
["255.255.11.135", "255.255.111.35"]
思路
首先要了解IP地址的定义。其是由三个'.'号分割的4个整数,这四个整数的大小不超过255。并且对于其中一个数字如果最高为0,则这个分割数为0,不能为025、00等。
回溯的思想,用idx来记录'.'的个数,对于每个数最多有3位,然后保证最高位为0时,这个整数为0。
代码
class Solution {
public:
vector<string> restoreIpAddresses(string s) {
vector<string> res;
dfs(s, 0, 0, "", res);
return res;
}
void dfs(string s, int f, int idx, string ip, vector<string> &res){
if (idx == 3){
if (s.size() - 1 - f < 3){
if (s[f] == '0' && f != s.size()-1) return;
int num = stoi(s.substr(f, s.size()-f));
if(num < 256) {
ip += to_string(num);
res.emplace_back(ip);
}
}
}
else{
for (int i = 1; i <= 3; ++i){
if (f+i >= s.size()) break;
int num = stoi(s.substr(f, i));
if (num < 256) dfs(s, f+i, idx+1, ip+to_string(num)+'.', res);
if (s[f] == '0' && i == 1) break;
}
}
}
};