代码改变世界

leetcode - Restore IP Addresses

2013-11-25 13:13  张汉生  阅读(163)  评论(0编辑  收藏  举报

 

 1 class Solution {
 2 public:
 3     bool isValid(string &s, int start, int end){
 4     int len = end-start+1;
 5     if (len<=0 || len>3)
 6         return false;
 7     if (len>1 && s.at(start)=='0')
 8         return false;
 9     int _val  = atoi(s.substr(start,len).c_str());
10     if (_val>=0 && _val<=255)
11         return true;
12     return false;
13     }
14     vector<string> restoreTwo(string & s, int start, int end){
15     int len = end-start+1;
16     vector<string> rlt;
17     if (len<=0 || len>6)
18         return rlt;
19     vector <string> rlts;
20     for (int i=start;i<end; i++){
21         if (isValid(s,start, i)&& isValid(s,i+1,end))
22         rlts.push_back(s.substr(start, i-start+1)+"."+s.substr(i+1, end-i));
23     }
24     return rlts;
25     }
26     vector<string> restoreIpAddresses(string s) {
27         // IMPORTANT: Please reset any member data you declared, as
28         // the same Solution instance will be reused for each test case.
29     int len = s.length();
30     vector<string> rlts;
31     for (int i=0; i<len-1; i++){
32         if (i+1<2 || len-i-1<2 || i+1>6 || len-i-1>6)
33         continue;
34         vector<string> left = restoreTwo(s,0,i);
35         vector<string> right = restoreTwo(s,i+1,len-1);
36         int m = left.size();
37         int n = right.size();
38         if (m<=0 || n<=0)
39         continue;
40         for (int p=0; p<m; p++)
41         for (int q=0; q<n; q++){
42             rlts.push_back(left[p]+"."+right[q]);
43             //cout << "[" << left[p]+"."+right[q] << "]" << endl;
44         }
45     }
46     return rlts;
47     }    
48 };