problem:
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)
thinking:
(1)IP格式要求:4段,每段位数最多3位,数值0~255,最少1位,1位可以为0,但是2 、3位时不能以0开头
(2)要输出IP,所以采用DFS深搜,深搜步数是固定的4步,每次可以获取字符串的1~3位来搜索。
code:
class Solution { private: vector<string> ret; public: vector<string> restoreIpAddresses(string s) { int n=s.size(); string str; dfs(1,0,0,n,s,str); dfs(1,0,1,n,s,str); dfs(1,0,2,n,s,str); return ret; } protected: void dfs(int step, int start, int end, int size,string s, string str) { if(end>=size) return; if(step==4) { if(end==size-1) { string tmp=s.substr(start,end-start+1); if(check(tmp)) ret.push_back(str+tmp); } return; } string tmp=s.substr(start,end-start+1); if(check(tmp)) { str=str+tmp+"."; dfs(step+1,end+1,end+1,size,s,str); dfs(step+1,end+1,end+2,size,s,str); dfs(step+1,end+1,end+3,size,s,str); } } bool check(string &str) { int n=str.size(); if(n<1 || n>3) return false; if(n==1) return true; if(n==2) { if(str.at(0)=='0') return false; else return true; } if(n==3) { if(str.at(0)=='0') return false; if(str>string("255")) return false; else return true; } } };
leetcode || 93、 Restore IP Addresses
原文地址:http://blog.csdn.net/hustyangju/article/details/45061655