您的位置:首页 > 其它

Leetcode Restore IP Addresses

2014-03-16 20:25 288 查看
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)

http://oj.leetcode.com/problems/restore-ip-addresses/

题意说明:输入一个字符串,还原成合理的ip地址,要求输出所有的可能性。

很显然dfs,但有各种各样的限制条件,一次想不全,都是提交出现wrong answer之后逐步加上的。

除了0本身之外,不能出现以0开头的数字。

对于过长的数字直接返回。

AC代码:

public class Solution {
    boolean dfs(String input, int number, String ipAddress, ArrayList<String> result) {
        if(input.length()==0) {
            return false;
        }
        if(number==3) {
           int addressNumber = Integer.parseInt(input);
           if(input.charAt(0)=='0') {
               if(!(input.length()==1&&addressNumber==0))
                return false;
           }
           if(addressNumber<=255) {
               ipAddress = ipAddress + input;
               result.add(ipAddress);
               return true;
           } else {
               return false;
           }
        } else {
            if(input.length()>=1) {
                dfs(input.substring(1),number + 1,ipAddress + input.substring(0,1) + "." ,result);
            }
            
            if(input.length()>=2&&input.charAt(0)!='0') {
                dfs(input.substring(2),number + 1,ipAddress + input.substring(0,2) + "." ,result);
            }
            
            if(input.length()>=3&&input.charAt(0)!='0') {
                int addressNumber = Integer.parseInt(input.substring(0,3));
                if(addressNumber<=255) { 
                    dfs(input.substring(3),number + 1,ipAddress + input.substring(0,3) + "." ,result);
                }
            }
        }
        return true;
    }
    
    public ArrayList<String> restoreIpAddresses(String s) {
        ArrayList<String> result = new ArrayList<String>();
        
        if(s==null||s.length()>12) {
            return result;
        }
        String temp = "";
        dfs(s,0,temp,result);
        return result;
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: