Restore IP Addresses leetcode java


題目

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)

 

題解

利用循環遞歸解決子問題。對於每個段內數來說,最多3位最少1位,所以在每一層可以循環3次,來嘗試填段。因為IP地址最多4個分段,當層數是3的時候說明已經嘗試填過3個段了,那么把剩余沒填的數段接到結尾即可。

這個過程中要保證的是填的數是合法的,最后拼接的剩余的數也是合法的。

 注意開頭如果是0的話要特殊處理,如果開頭是0,判斷整個串是不是0,不是的話該字符就是非法的。因為001,01都是不對的。

代碼如下:

 1      public ArrayList<String> restoreIpAddresses(String s) {  
 2         ArrayList<String> res =  new ArrayList<String>();  
 3         String item =  new String();
 4          if (s.length()<4||s.length()>12) 
 5          return res;  
 6         
 7         dfs(s, 0, item, res);  
 8          return res;  
 9     }  
10       
11      public  void dfs(String s,  int start, String item, ArrayList<String> res){  
12          if (start == 3 && isValid(s)) {  
13             res.add(item + s);  
14              return;  
15         }  
16          for( int i=0; i<3 && i<s.length()-1; i++){  
17             String substr = s.substring(0,i+1);  
18              if (isValid(substr))
19                 dfs(s.substring(i+1, s.length()), start+1, item + substr + '.', res);  
20         }  
21     }  
22       
23      public  boolean isValid(String s){  
24          if (s.charAt(0)=='0')
25              return s.equals("0");  
26              int num = Integer.parseInt(s);
27             
28          if(num <= 255 && num > 0)
29              return  true;
30          else
31              return  false;
32     } 

 Refrence:http://blog.csdn.net/u011095253/article/details/9158449

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM