题目
给定一个只包含数字的字符串,复原它并返回所有可能的 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 地址。
代码
1 #include<algorithm> 2 class Solution { 3 public: 4 vector<string>res; 5 // bool check(string s,int start,int end){ 6 // string s1 = s.substr(start,start-end+1); 7 // if((s1[0] == 0 && s1.size() > 1) || stoi(s1) > 255) return false; 8 // else return true; 9 // } 10 bool check(string s,int start,int end){ 11 if(start > end) return false; 12 if(s[start] == '0' && start != end) return false; //查看是否有前导0 13 //查看是否在有效IP 14 int num = 0; 15 for(int i = start;i <= end;i++){ 16 if(s[i] > '9' || s[i] < '0') return false; 17 num = num*10 + (s[i] - '0'); //字符串转化为数字 18 if(num > 255) return false; 19 } 20 return true; 21 } 22 void backtracking(string s,int startIndex,int pointNum){ 23 if(pointNum == 3){ 24 if(check(s,startIndex,s.size()-1)){ 25 res.push_back(s); 26 } 27 return; 28 } 29 for(int i = startIndex;i < s.size();i++){ 30 if(check(s,startIndex,i)){ 31 s.insert(s.begin()+i+1,'.'); 32 pointNum++; 33 backtracking(s,i+2,pointNum); 34 pointNum--; 35 s.erase(s.begin()+i+1); 36 37 }else{ 38 break; 39 } 40 } 41 } 42 vector<string> restoreIpAddresses(string s) { 43 backtracking(s,0,0); 44 return res; 45 } 46 };
自己写的check函数不知为什么错了?stoi里面的参数不能跟substr吗?老是报错