classSolution{public:vector<string>restoreIpAddresses(conststring&s){vector<string>ans;dfs(s,0,{},ans);returnans;}private:voiddfs(conststring&s,intstart,vector<string>&&path,vector<string>&ans){if(path.size()==4&&start==s.length()){ans.push_back(path[0]+"."+path[1]+"."+path[2]+"."+path[3]);return;}if(path.size()==4||start==s.length())return;for(intlength=1;length<=3;++length){if(start+length>s.length())return;// Out of boundif(length>1&&s[start]=='0')return;// Leading '0'conststring&num=s.substr(start,length);if(stoi(num)>255)return;path.push_back(num);dfs(s,start+length,move(path),ans);path.pop_back();}}};
classSolution{publicList<String>restoreIpAddresses(finalStrings){List<String>ans=newArrayList<>();dfs(s,0,newArrayList<>(),ans);returnans;}privatevoiddfs(finalStrings,intstart,List<String>path,List<String>ans){if(path.size()==4&&start==s.length()){ans.add(String.join(".",path));return;}if(path.size()==4||start==s.length())return;for(intlength=1;length<=3;++length){if(start+length>s.length())// Out of boundreturn;if(length>1&&s.charAt(start)=='0')// Leading '0'return;finalStringnum=s.substring(start,start+length);if(Integer.parseInt(num)>255)return;path.add(num);dfs(s,start+length,path,ans);path.remove(path.size()-1);}}}
classSolution:defrestoreIpAddresses(self,s:str)->List[str]:ans=[]defdfs(start:int,path:List[int])->None:iflen(path)==4andstart==len(s):ans.append(path[0]+'.'+path[1]+'.'+path[2]+'.'+path[3])returniflen(path)==4orstart==len(s):returnforlengthinrange(1,4):ifstart+length>len(s):return# Out of boundiflength>1ands[start]=='0':return# Leading '0'num=s[start:start+length]ifint(num)>255:returndfs(start+length,path+[num])dfs(0,[])returnans