LeetCode-Restore IP Addresses

哎,写代码太不专注了,

还是头脑和注意力不够集中,

需要多在脑子里面磨练,

另外写程序的思维方式还比较土,

总喜欢单独考虑很多特殊情况,导致代码看起来很繁琐,

需要多看别人的代码好好学习如何写得简洁短小;

 1 class Solution {
 2 public:
 3     vector<string> restoreIpAddresses(string s) {
 4         // Start typing your C/C++ solution below
 5         // DO NOT write int main() function
 6         vector<string> res;
 7         if (s.empty() || s.size() < 4 || s.size() > 12) {
 8             return res;
 9         }
10         vector<string> ip;
11         get(res, ip, s, 0, 0);
12         return res;
13     }
14     void get(vector<string> &res, vector<string> &ip, string &s, int p, int num) {
15         if (num == 3) {
16             if (s.size() - p > 3) {
17                 return;
18             }
19             if (s[p] == '0' && p != s.size() - 1) {
20                 return;
21             }
22             int n = 0;
23             for (int i = p; i < s.size(); ++i) {
24                 n = n * 10 + s[i] - '0';
25             }
26             if (n > 255) {
27                 return;
28             }
29             string ipstr = s.substr(p, s.size() - p + 1);
30             string ret = ip[0] + "." + ip[1] + "." + ip[2] + "." + ipstr;
31             res.push_back(ret);
32             return;
33         }
34         if (s[p] == '0') {
35             ip.push_back(s.substr(p, 1));
36             int len = s.size() - p - 1;
37             int t = 3 - num;
38             if (len < t || len > 3 * t) {
39                 return;
40             }
41             get(res, ip, s, p + 1, num + 1);
42         }
43         else {
44             for (int i = 0; i < 3; ++i) {
45                 vector<string> nvec = ip;
46                 nvec.push_back(s.substr(p, i + 1));
47                 int len = s.size() - p - 1 - i;
48                 int t = 3 - num;
49                 if (len < t || len > 3 * t) {
50                     continue;
51                 }
52                 if (i == 2) {
53                     int temp = 100 * (s[p] - '0') + 10 * (s[p + 1] - '0') + (s[p + 2] - '0');
54                     if (temp > 255) {
55                         continue;
56                     }
57                 }
58                 get(res, nvec, s, p + i + 1, num + 1);
59             }
60         }
61     }
62 };

 

转载于:https://www.cnblogs.com/chasuner/p/restoreipaddresses.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值