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 };