Given a string containing only digits, restore it by returning all possible valid IP address combinations.
For example:
Given "25525511135"
,
return ["255.255.11.135", "255.255.111.35"]
. (Order does not matter)
class Solution { public: std::vector<std::string> restoreIpAddresses(std::string s) { std::vector<std::string> res; if(s.size() < 4 || s.size() > 12) return res; dfs(s,1,"",res); #if 1 for (int i = 0; i < res.size(); i++) { std::cout << res[i] << std::endl; } #endif // 1 return res; } private: void dfs(std::string s,int n, std::string ip,std::vector<std::string> &res) { if(s.size() == 0) return; if(n == 4 && isValid(s)) { ip += s; res.push_back(ip); return; } for (int i = 1; i <= 3; i++) { if(i > s.size()) break; std::string t = s.substr(0,i); if(isValid(t)) { std::string tmp = s.substr(i); dfs(tmp,n+1,ip+t+".",res); } } } bool isValid(std::string s) { if(s.size() == 0 || (s.size() > 1 && s[0] == '0')) return false; int n = std::atoi(s.c_str()); if(0 <= n && n <= 255) return true; return false; } };