1 class Solution { 2 public: 3 bool isIp(string s) { 4 int len = s.size(), ip = 0; 5 if (len == 0 || len > 4 || len > 1 && s[0] == ‘0‘) return false; 6 for (int i = 0; i < len; i++) { 7 ip = ip*10 + int(s[i] - ‘0‘); 8 } 9 if (ip > 255) return false; 10 return true; 11 } 12 13 vector<string> restoreIpAddresses(string s) { 14 vector<string> result; 15 int len = s.size(); 16 string ip1, ip2, ip3, ip4; 17 if (len < 4 || len > 12) return result; 18 for (int i = 0; i < 3; i++) { 19 if (i+1 > len) continue; 20 ip1 = s.substr(0, i+1); 21 if (isIp(ip1)) { 22 for (int j = 0; j < 3; j++) { 23 if (i+j+2 > len) continue; 24 ip2 = s.substr(i+1, j+1); 25 if (isIp(ip2)) { 26 for (int k = 0; k < 3; k++) { 27 if (i+j+k+3 > len) continue; 28 ip3 = s.substr(i+j+2, k+1); 29 ip4 = s.substr(i+j+k+3); 30 if (isIp(ip3) && isIp(ip4)) { 31 result.push_back(ip1 + ‘.‘ + ip2 + ‘.‘ + ip3 + ‘.‘ + ip4); 32 } 33 } 34 } 35 } 36 } 37 } 38 return result; 39 } 40 };
LeetCode - Refresh - Restore IP Addresses
原文:http://www.cnblogs.com/shuashuashua/p/4358818.html