第34题 Restore IP Addresses

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)

Hide Tags
  Backtracking String







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’开头的字符串要特别处理。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值