LeetCode93. 复原IP地址

题目

给定一个只包含数字的字符串,复原它并返回所有可能的 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吗?老是报错

posted @ 2021-02-01 16:34  Uitachi  阅读(76)  评论(0编辑  收藏  举报