题目:93. 复原IP地址
给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。
有效的 IP 地址正好由四个整数(每个整数位于 0 到 255 之间组成),整数之间用 ‘.’ 分隔。
示例:
输入: "25525511135"
输出: ["255.255.11.135", "255.255.111.35"]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/restore-ip-addresses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
基本思想:dfs
- 将分隔的每一组数,看成树的一个节点。
- 节点可能由1个,2个或者3个数组成,并且不能超过255,非0数字不能以0开头
- 遍历每一种可能
class Solution {
public:
vector<string> res;
vector<string> restoreIpAddresses(string s) {
int len = s.length();
dfs(s, 0, "", 0);
return res;
}
//pos表示起始位置,cur表示当前的字符串,cnt表示“.”的个数(用来判断是否分隔完毕)
void dfs(string &s, int pos, string cur, int cnt){
//cout << cur << endl;
if(pos == s.length() && cnt == 3){
res.push_back(cur);
return;
}
if(cnt == 3 && pos < s.length())
return;
if(pos >= s.length())
return;
for(int i = 1; i <= 3; ++i){
string temp = s.substr(pos, i);
if(judge(temp)){
if(cur == ""){
dfs(s, pos + i, temp, cnt);
}
else{
dfs(s, pos + i, cur + "." + temp, cnt + 1);
}
}
}
}
bool judge(string s){
if(s[0] == '0' && s.length() > 1)
return false;
int k = stoi(s);
return k <= 255;
}
};