restore ip addresses

题意:给定一串数字,返回这串数字能够组成的所有合法ip。
思路:对ip的每一段进行isValid判断,再对每一段的ip,若满足长度为3且通过isValid判断,则返回;否则,对每一段的ip,若当前分割满足isValid,则递归调用dfs,进行下一轮的调用。
代码:

package com.RestoreIpAddresses;

import java.util.ArrayList;

public class RestoreIpAddresses {

    public boolean isValid(String string ) {
        if(string.charAt(0)=='0')   
            return string.equals('0');
        int num = Integer.parseInt(string);
        if(num > 0 && num <= 255)   return true;
        else return false;
    }

    public void dfs(String s , int start , String item , ArrayList<String>res) {
        if(start == 3 && isValid(s)){
            res.add(item+s);
            return;
        }
        for (int i = 0; i< 3 && i < s.length()-1; i++) {
            String substr = s.substring(0, i+1);
            if(isValid(substr)){
                dfs(s.substring(i+1, s.length()), start+1, item+substr+".", res);
            }
        }
    }

    public ArrayList<String> restoreIpAddresses(String s) {
        ArrayList<String> res = new ArrayList<>();
        String item = new String();
        if(s.length() < 4|| s.length() > 12){
            return res;
        }
        dfs(s, 0, item, res);
        return res;
    }


    public static void main(String[] args) {
        String string = "25525511135";
        RestoreIpAddresses ria = new RestoreIpAddresses();
        ArrayList<String>res = new ArrayList<>();
        res = ria.restoreIpAddresses(string);
        System.out.println(res);

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值