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)
Solution in Java:
public class Solution {
public List<String> restoreIpAddresses(String s) {
List<String> result = new ArrayList<String>();
int lengthTotal = s.length();
if(lengthTotal<4||lengthTotal>12) return result;
for(int i=1; i<=3; i++){
String part1 = s.substring(0,i);
if(lengthTotal-i<3 || lengthTotal-i>9) continue;
for(int j=i+1; j<=i+3; j++){
String part2 = s.substring(i, j);
if(lengthTotal-j<2||lengthTotal-j>6) continue;
for(int k=j+1; k<=j+3&& k<lengthTotal; k++){
String part3 = s.substring(j, k);
if(lengthTotal-k<1||lengthTotal-k>3) continue;
String part4 = s.substring(k, lengthTotal);
if(valid(part1)&&valid(part2)&&valid(part3)&&valid(part4)){
result.add(part1+"."+part2+"."+part3+"."+part4);
}
}
}
}
return result;
}
public boolean valid(String input){
int curValue = Integer.parseInt(input);
if(curValue<=255) {
if(!(input.length()>1&&input.charAt(0)=='0'))
return true;
}
return false;
}
}
Note:
substring(startIndex, endIndex) 返回从startIndex到endIndex的子字符串,其中包括startIndex的字符,不包括endIndex处字符,子字符串长度为endIndex-startIndex。
第三次循环中,剩下的字符串长度(从j+1到最后)可能小于三个,所以要增加判断条件k<lengthTotal。
函数valid中,Integer.parseInt(str)函数会把“01”转化为int 1。所以对于长度大于1,以‘0’开头的字符串要特别处理。