您的位置:首页 > 编程语言 > Java开发

leetcode Restore IP Addresses

2014-11-14 21:09 309 查看
Restore IP Addresses 原题地址:
https://oj.leetcode.com/problems/restore-ip-addresses/
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)
每个位置上的数字介于0-255之间,另外注意这个位置上不能出现"01"之类的字符串。

public class Solution {
private List<String> IP = new ArrayList<String>();
public List<String> restoreIpAddresses(String s) {
int max = Math.min(3, s.length() - 3);
int min = Math.max(1, s.length() - 9);

if (min > 3 || max < 1)
return IP;
for (int i = min; i <= max; i++) {
StringBuffer Temp = new StringBuffer();
String temp = s.substring(0, i);
if (temp.charAt(0) == '0' && i > 1)
break;
int ip = Integer.parseInt(temp);
if (ip < 256) {
Temp.append(s.substring(0, i));
findIP(Temp, 3, s.substring(i));
}
}
return IP;
}

private void findIP(StringBuffer Temp, int p, String s) {
int max = Math.min(3, s.length() - (p-1));
int min = Math.max(1, s.length() - 3 * (p - 1));

if (min > 3 || max < 1)
return;

if (p == 1) {
if (s.charAt(0) == '0' && s.length() > 1)
return;
int ip = Integer.parseInt(s);
if (ip < 256) {
Temp.append("."+s);
IP.add(Temp.toString());
}
return;
}
int start = Temp.length();
for (int i = min; i <= max; i++) {
String temp = s.substring(0, i);
if (temp.charAt(0) == '0' && temp.length() > 1)
return;
int ip = Integer.parseInt(temp);
if (ip < 256) {
Temp.append("." + s.substring(0, i));
findIP(Temp, p-1, s.substring(i));
Temp.delete(start, Temp.length());
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java leetcode 回溯