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: bool check(string s){ if(atoi(s.c_str()) > 255) return false; if(s.size() >1 && s[0] == '0')return false; return true; } void dfs(string s, vector<string> &cur){ if(cur.size() == 3 ){ if(s.size() >=1 &&check(s)){ cur.push_back(s); res.push_back(cur[0]+'.'+cur[1]+'.'+cur[2]+'.'+cur[3]); cur.pop_back(); } return ; } for(int i = 1; i <= 3 && i <= s.size(); i++){ string temp = s.substr(0,i) ; if(check(temp)){ cur.push_back(temp); dfs(s.substr(i,s.size()-i),cur); cur.pop_back(); } } } vector<string> restoreIpAddresses(string s) { // Start typing your C/C++ solution below // DO NOT write int main() function res.clear(); if(s.size()>12 || s.size() <4) return res; vector<string> cur; dfs(s,cur); return res; } private: vector<string> res; };