Leetcode 93. 复原IP地址
题目
给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。
有效的 IP 地址正好由四个整数(每个整数位于 0 到 255 之间组成),整数之间用 ‘.’ 分隔。
测试样例
输入: "25525511135"
输出: ["255.255.11.135", "255.255.111.35"]
题解
回溯算法
此题是在字符串中选取4段,其中每段的数要小于等于255,且不能有前置0。因此在选取数的时候,我们只要避免选的数有前置0或超过255即可,详细过程见代码
代码
vector<string> ans;
void dfs(int begin,int num,int n,string &str,string& s){
if(n-begin > num*3) return; //剩下的数超了,因此剪枝
else if(num == 0) ans.push_back(str);
else{
int len = str.length();
for(int i=1; i<4; i++){
if(begin + i > n) break;
string x = s.substr(begin,i);
if(x[0] == '0' && i>1) break; //有前置0
int ip = stoi(x);
if(ip > 255) break; //数大于255
if(num != 1) str += x + ".";
else str += x;
dfs(begin+i,num-1,n,str,s);
str = str.substr(0,len);
}
}
}
vector<string> restoreIpAddresses(string s) {
string str;
dfs(0,4,s.length(),str,s);
return ans;
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/restore-ip-addresses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。