给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。
示例:
输入: "25525511135"
输出: ["255.255.11.135", "255.255.111.35"]
解答:遇到这种问题第一想到的就是用递归函数来求解。在这道题实际上也是可以这样处理的。
递归函数逻辑如下:
【1】如果已经取到了四个字符且字符串已经被取完,那么所取字符串符合要求,保存(为了加快速度,这里采用 s.size()>(4-n)*3 一个判断条件);
【2】依次提取字符串的前一个、前二个、前三个字符串,并转化成十进制数字,判断是否符合要求(如果所取字符数大于1那么首字符不能为 ’0‘ );是则进行递归处理();
void restoreIpAddressesHelper(string s,vector<string>&res,string out,int n) { if(n==4 || s.size()>(4-n)*3) { if(s.empty()) res.push_back(out); return; } string num; for(int i=1;i<4;i++) { num = s.substr(0,i); if(atoi(num.c_str())<256 && (i>1?num[0]!=‘0‘:true) && (int)s.size()>=i) restoreIpAddressesHelper(s.substr(i),res, out+(n==0?"":".")+num,n+1); } } //93 vector<string> restoreIpAddresses(string s) { vector<string> res; if(s.size()>12 || s.size()<4) return res; string temp; restoreIpAddressesHelper(s,res,"",0); return res; }//93
原文:https://www.cnblogs.com/2Bthebest1/p/10832898.html