有效 IP 地址 正好由四个整数(每个整数位于 0
到 255
之间组成,且不能含有前导 0
),整数之间用 '.'
分隔。
- 例如:
"0.1.2.201"
和"192.168.1.1"
是 有效 IP 地址,但是"0.011.255.245"
、"192.168.1.312"
和"192.168@1.1"
是 无效 IP 地址。
给定一个只包含数字的字符串 s
,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s
中插入 '.'
来形成。你 不能 重新排序或删除 s
中的任何数字。你可以按 任何 顺序返回答案。
示例 1:
输入:s = "25525511135" 输出:["255.255.11.135","255.255.111.35"]
示例 2:
输入:s = "0000" 输出:["0.0.0.0"]
由于我们需要找出所有可能复原出的 IP 地址,因此可以考虑使用回溯的方法,对所有可能的字符串分隔方式进行搜索,并筛选出满足要求的作为答案。
代码:
package five;
import java.util.ArrayList;
import java.util.List;
public class a2 {
public static List<String> sea(String s){
List<String> list=new ArrayList<>();
StringBuffer sb=new StringBuffer();
backdrop(0,list,sb,s);
return list;
}
public static void backdrop(int index,List<String> list,StringBuffer sb,String s){
if (index==4||s.length()==0){
if (index==4&&s.length()==0){
list.add(sb.toString());
}
return;
}
for (int i=0;i<s.length()&&i<=2;i++){
if (i!=0&&s.charAt(0)=='0') break;
String str=s.substring(0,i+1);
if (Integer.parseInt(str)<=255){
if (sb.length()!=0) str='.'+str;
sb.append(str);
backdrop(index+1,list,sb,s.substring(i+1));
sb.delete(sb.length()-str.length(),sb.length());
}
}
}
}