标签:
原题链接在这里:https://leetcode.com/problems/restore-ip-addresses/
DFS, 递归解决。IP 地址一共有四段。period来记录段数,从0开始,当period == 3时是说明到了最后一段,把剩下的当成最后一段,判断是否合法。
加上的新字符必须是合法的,判断合法首先看开头是不是‘0‘. 若是,return s.equals("0").
若开头不是‘0‘, 注意观察这段string对应的值是不是在(0,255]范围内。
所花时间是指数量级的。
AC Java:
1 public class Solution { 2 public List<String> restoreIpAddresses(String s) { 3 List<String> res = new ArrayList<String>(); 4 if(s == null || s.length() < 4 || s.length() > 12){ 5 return res; 6 } 7 dfs(s,0,"",res); 8 return res; 9 } 10 11 private void dfs(String s, int period, String str, List<String> res){ 12 if(period == 3 && isValid(s)){ 13 res.add(str+s); 14 return; 15 } 16 for(int i = 0; i<3 && i<s.length()-1; i++){ 17 String sub = s.substring(0,i+1); 18 if(isValid(sub)){ 19 dfs(s.substring(i+1, s.length()), period+1, str+sub+".", res); 20 } 21 } 22 } 23 //Check if s is valid 24 private boolean isValid(String s){ 25 if(s.charAt(0) == ‘0‘){ 26 return s.equals("0"); 27 } 28 int num = Integer.valueOf(s); 29 if(num>0 && num<256){ 30 return true; 31 }else{ 32 return false; 33 } 34 } 35 }
标签:
原文地址:http://www.cnblogs.com/Dylan-Java-NYC/p/4921883.html