码迷,mamicode.com
首页 > 其他好文 > 详细

Restore IP Addresses

时间:2015-06-09 11:31:09      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:

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)

 

ip 规则和题解抄自“爱做饭”:) ref http://www.cnblogs.com/springfor/p/3886409.html

利用循环递归解决子问题。对于每个段内数来说,最多3位最少1位,所以在每一层可以循环3次,来尝试填段。因为IP地址最多4个分段,当层数是3的时候说明已经尝试填过3个段了,那么把剩余没填的数段接到结尾即可。

这个过程中要保证的是填的数是合法的,最后拼接的剩余的数也是合法的。

 注意开头如果是0的话要特殊处理,如果开头是0,判断整个串是不是0,不是的话该字符就是非法的。因为001,01都是不对的。

public class Solution {
    public ArrayList<String> restoreIpAddresses(String s) {
        ArrayList<String> res = new ArrayList<String>();
        if(s==null||s.length()<4||s.length()>12) return res;
        dfs(0,1,res,s,"");
        return res;
    }
    private void dfs(int start, int segment, ArrayList<String> res, String s, String item){
        if(start>=s.length()) return;
        if(segment==4){
            String str = s.substring(start);
            if(isValid(str)){
                res.add(item + "." + str);
            }
            return;
        }
        for(int i=1; segment<4 && (i+start)<=s.length();i++){
            String str = s.substring(start, start+i);
            if(isValid(str)){
                if(segment ==1){
                    dfs(start+i, segment+1,res, s, str);
                }else{
                    dfs(start+i, segment+1,res, s, item+"."+str);
                }
            }
        }
    }
    private boolean isValid(String str){
        if(str==null||str.length()>3||(str.charAt(0)==‘0‘&&str.length()>1)) return false;
        int code = Integer.parseInt(str);
        return (code>=0 && code<=255);
    }
}

 

Restore IP Addresses

标签:

原文地址:http://www.cnblogs.com/jiajiaxingxing/p/4562770.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!