您的位置:首页 > 其它

Restore IP Addresses

2014-02-07 13:54 155 查看
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)

思路:backtracking。搜索所有解空间。

几点注意的地方:
1. string 的递归传递,用 string 分开写,temp + s.substring(0,1) + "." 这样回来的时候,也会回到原来的值。

2. 为了每次只加到0~3的位置,所以i的值只限制到3,那么相应的string 的s值就应该每次传递的时候变换。每次取完了,就应该去掉。

3. 结束的时候应该是count = 3,的时候,因为最后只需要加上最后一段就可以了。

4. 最后判断isvalid的时候,需要判断0开头的string是不是0.

public class Solution {
    public List<String> restoreIpAddresses(String s) {
        List<String> list = new ArrayList<String>();
        if(s == null || s.length() < 4 || s.length() > 12) return list;
        collect(s, 0, list, "");
        return list;
    }
     
    public void collect(String s,  int count, List<String> list, String temp){
        if( count == 3 && isvalid(s)){
            list.add(temp+s);
            return;
        }
        for(int i=0; i<4 && i<s.length(); i++){
            if(isvalid(s.substring(0,i))){
                collect(s.substring(i), count+1, list, temp + s.substring(0,i) + ".");
            }
        }
    }
     
    public boolean isvalid(String str){
        if(str == null || str.length()>4 || str.length() <=0) return false;
        if(str.charAt(0) == '0'){
            return str.equals("0");
        }
        int val = Integer.parseInt(str);
        return (0<=val && val<=255);
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: