【题目】
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地址。
思路:回溯。
详见代码中注释:
public class Solution {
List<String> ans = new ArrayList<String>();
public List<String> restoreIpAddresses(String s) {
backTracking(s, 0, "");
return ans;
}
//left表示剩下未识别的字符串,cur表示当前已经识别的字符串
//n表示当前要识别的是ip的第几段,从0到3
public void backTracking(String left, int n, String cur) {
//位数不符,直接pass
int len = left.length();
if (len < 4 - n || len > 3 * (4 - n)) return;
//识别到最后一段时,如果符合,添加到结果集
if (n == 3) {
if (left.length() > 1 && left.charAt(0) == '0') return; //防止“010”这种情况
int last = Integer.valueOf(left);
if (last >= 0 && last <= 255) {
cur += left;
ans.add(cur);
}
}
//识别ip的前三段,可能是1位、2位、3位
for (int i = 1; i < 4 && i < left.length(); i++) {
String str = left.substring(0, i);
if (str.length() > 1 && str.charAt(0) == '0') return; //防止“010”这种情况
int t = Integer.valueOf(str);
if (t >= 0 && t <= 255) {
String next = cur + str + ".";
backTracking(left.substring(i), n + 1, next);
}
}
}
}