给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。
示例:
输入: "25525511135"
输出: ["255.255.11.135", "255.255.111.35"]
我们要知道IP的格式,每位是在0~255之间,
注意: 不能出现以0开头的两位以上数字,比如012,08…
回溯法
public List<String> restoreIpAddresses(String s) {
List<String> ret = new ArrayList<>();
StringBuilder tempAddress = new StringBuilder();
doRestore(0, 0, "", ret, s);
return ret;
}
//k表示选出了几个数字,总共4个,idx表示下一个选出的合法数字起始下标
private void doRestore(int k, int idx, String temp, List<String> addresses, String s){
if (k==4 || idx==s.length()){
if (k==4 && idx == s.length())
addresses.add(temp);
return;
}
for (int i = idx;i<s.length() && i-idx<=2;i++){
if (i!=idx && s.charAt(idx)=='0')
break;
String part = s.substring(idx, i+1);
if (Integer.valueOf(part)<=255){
if (temp.length()!=0){
part = "." + part;
}
doRestore(k+1, i+1, temp+part, addresses, s);
}
}
}