93. Restore IP Addresses (DFS, String)
阿新 • • 發佈:2019-01-13
Given a string containing only digits, restore it by returning all possible valid IP address combinations.
Example:
Input: "25525511135"
Output: ["255.255.11.135", "255.255.111.35"]
思路:
合法性的規則:
IP 地址的規律是分4個Part,每個Part是從0-255的數字
0-255的數字,轉換成字元,即每個Part 可能由一個字元組成,二個字元組成,或者是三個字元組成。
寫一個For迴圈每一層從1個字元開始取一直到3個字元,再加一個isValid的函式來驗證取的字元是否是合法數字,如果是合法的數字,我們再進行下一層遞迴,否則跳過。
注意:
1. isValid函式邊界:有0開頭的字串只有“0”合法
2. 迴圈判定條件還包括長度
3. 每次判定合法性之後加上substr和“.”
4. 最後只有用完所有字元並且有四個部分才是爭取的ip。此時直接驗證剩下字元的合法性即可(合法性就保證位數不大於3)
public List<String> restoreIpAddresses(String s) { List<String> res = new ArrayList<String>(); if(s.length()==0 || s.equals("") ||s.length()>12) return res; dfs(s,0,"",res); return res; } private void dfs(String s,int part, String tmp,List<String> res){ if(part==3 && isValid(s)){ res.add(tmp+s); return; } for(int i=1;i<4 && i<s.length();i++){//注意迴圈條件除了四段上線之外還要不能大於s的長度 String sub = s.substring(0, i); if(!isValid(sub)) continue; dfs(s.substring(i),part+1,tmp+sub+".",res);//直接截斷s } } private boolean isValid(String s){ if(s.charAt(0)=='0') return s.equals("0");//"010","001"這種都不合法 int value = Integer.valueOf(s); if(value>=0 && value<=255) return true; else return false; }