Sunday, January 11, 2015

Restore IP Addresses (LeetCode String)

Question: 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)

Idea: Brute force. Use three pointers to split the string into four substrings, then check whether all the four substrings are valid. If yes, add to the result, otherwise continue.

Time: O(n^3) Space: O(n)

Code:
 public class Solution {  
   public List<String> restoreIpAddresses(String s) {  
     List<String> result=new ArrayList<String>();  
     if(s.length()<4)  
       return result;  
     for(int i=1;i<4&&i<s.length()-2;i++)  
     {  
       for(int j=i+1;j<i+4&&j<s.length()-1;j++)  
       {  
         for(int k=j+1;k<j+4&&k<s.length();k++)  
         {  
           String sub1=s.substring(0,i);  
           String sub2=s.substring(i,j);  
           String sub3=s.substring(j,k);  
           String sub4=s.substring(k);  
           if(isValid(sub1)&&isValid(sub2)&&isValid(sub3)&&isValid(sub4))  
             result.add(sub1+"."+sub2+"."+sub3+"."+sub4);  
         }  
       }  
     }  
     return result;  
   }  
   public boolean isValid(String s)  
   {  
     if(s.length()==0||s.length()>3||(s.charAt(0)=='0'&&s.length()>1)||Integer.parseInt(s)>255)  
       return false;  
     return true;  
   }  
 }  

No comments:

Post a Comment