问题描述:
给定一个只包含数字的字符串,复原它并返回所有可能的IP地址格式。
问题分析:
采用回溯算法进行求解。
-
class Solution {
-
public:
-
vector<
string> restoreIpAddresses(
string s) {
-
string ip;
-
helper(s,
0, ip);
-
return res;
-
}
-
void helper(string s, int n, string ip) {
-
if (n ==
4) {
-
if (s.empty()) res.push_back(ip);
//当已经有3个数字可以作为一个字节,并且s字符串为空
-
}
-
else {
-
for (
int k =
1; k <
4; ++k) {
-
if (s.size() < k)
break;
//当长度不够,直接退出
-
int val = stoi(s.substr(
0, k));
//stoi表示将string类型数据转换成int类型数据
-
if (val >
255 || k !=
std::to_string(val).size())
continue;
//剪枝
-
helper(s.substr(k), n +
1, ip + s.substr(
0, k) + (n ==
3 ?
"" :
"."));
//s.substr(0, k) + (n == 3 ? "" : ".")是字符串的连接操作,不是整数
-
}
-
}
-
return;
-
}
-
private:
-
vector<
string> res;
-
};
转载:https://blog.csdn.net/weixin_44504987/article/details/104518697
查看评论