题目地址: https://leetcode-cn.com/problems/restore-ip-addresses/
题目描述: 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。
有效的 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。
例如:"0.1.2.201" 和 "192.168.1.1" 是 有效的 IP 地址,但是 "0.011.255.245"、"192.168.1.312" 和 "192.168@1.1" 是 无效的 IP 地址。
参考代码:
class Solution1 {
vector<string> result;
void backtracking(string &s,int startIndex, int number){
if (number == 3) {
if (isValid(s, startIndex, s.size()-1)) {
result.push_back(s);
}
return;
}
for (int i = startIndex; i<s.size(); i++) {
if (isValid(s, startIndex, i)) {
s.insert(i+1, ".");
backtracking(s, i+2, number +1);
s.erase(i+1,1);
} else {
break;
}
}
}
bool isValid(string s,int start,int end) {
//1111
if (start > end) {
return false;
}
// 001 非法
if (s[start] == '0' && start != end) {
return false;
}
// 大于255 非法
int num = 0;
for (int i = start; i<=end; i++) {
num = (s[i] - '0') + num * 10;
}
if (num > 255) {
return false;
}
return true;
}
public:
vector<string> restoreIpAddresses(string s) {
result.clear();
if (s.size() > 12) return result; // 算是剪枝了
backtracking(s, 0, 0);
return result;
}
};
网友评论