1+ package RestoreIPAddresses ;
2+
3+ import java .util .ArrayList ;
4+ import java .util .List ;
5+ import java .util .stream .Collectors ;
6+
7+ /**
8+ * User: Danyang
9+ * Date: 1/28/2015
10+ * Time: 10:58
11+ *
12+ * Given a string containing only digits, restore it by returning all possible valid IP address combinations.
13+
14+ For example:
15+ Given "25525511135",
16+
17+ return ["255.255.11.135", "255.255.111.35"]. (Order does not matter)
18+ */
19+ public class Solution {
20+ /**
21+ * Notice:
22+ * 1. zero heading
23+ * @param s
24+ * @return
25+ */
26+ public List <String > restoreIpAddresses (String s ) {
27+ List <String > ret = new ArrayList <>();
28+ dfs (s , 4 , new ArrayList <>(), ret );
29+ return ret ;
30+ }
31+
32+ void dfs (String seq , int n , List <String > cur , List <String > ret ) {
33+ if (n ==0 ) {
34+ if (seq .length ()==0 )
35+ ret .add (cur .stream ().collect (Collectors .joining ("." )));
36+ }
37+ else {
38+ for (int i =1 ; i <=seq .length () && i <=3 ; i ++) {
39+ String sub = seq .substring (0 , i );
40+ if (isValidSegment (sub )) {
41+ cur .add (sub );
42+ dfs (seq .substring (i , seq .length ()), n -1 , cur , ret );
43+ cur .remove (cur .size ()-1 );
44+ }
45+ }
46+ }
47+
48+ }
49+
50+ boolean isValidSegment (String s ) {
51+ if (s .length ()>3 || s .length ()<1 )
52+ return false ;
53+ if (s .length ()>1 && s .charAt (0 )=='0' )
54+ return false ;
55+ if (Integer .parseInt (s )>255 )
56+ return false ;
57+ return true ;
58+ }
59+
60+ public static void main (String [] args ) {
61+ List <String > ret = new Solution ().restoreIpAddresses ("25525511135" );
62+ System .out .println (ret );
63+ }
64+ }
0 commit comments