您的位置:首页 > 其它

LeetCode Restore IP Addresses

2015-07-02 17:44 323 查看
Description:

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)
Solution:

这道题目需要注意的一个点是,如果某一个IP段有0作为首字母出现,那么0一定是单独的一个段。即为a.0xxx -> a.0.xxx。如果放在中间就无所谓。

三层for循环,写起来略微复杂了一点,用DFS会更加简洁。

import java.util.*;

public class Solution {
List<String> list = new ArrayList<String>();

public List<String> restoreIpAddresses(String s) {
if (s.length() > 13)
return list;
int limit = 256;
int len = s.length();
long a, b, c, d;
for (int i = 1; i < len; i++) {
a = Long.parseLong(s.substring(0, i));
if (a >= limit)
break;
if ((a > 0 && s.charAt(0) == '0') || (a == 0 && i > 1))
continue;
for (int j = i + 1; j < len; j++) {
b = Long.parseLong(s.substring(i, j));
if (b >= limit)
break;
if ((b > 0 && s.charAt(i) == '0') || (b == 0 && j - i > 1))
continue;
for (int k = j + 1; k < len; k++) {
c = Long.parseLong(s.substring(j, k));
if (c >= limit)
break;
if ((c > 0 && s.charAt(j) == '0') || (c == 0 && k - j > 1))
continue;
d = Long.parseLong(s.substring(k, len));
if (d >= limit)
continue;
if ((d > 0 && s.charAt(k) == '0')
|| (d == 0 && len - k > 1))
continue;
list.add(a + "." + b + "." + c + "." + d);
}
}
}

return list;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: