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