文章目录
题目大意
给定一个只包含数字的字符串,用以表示一个 IP 地址,返回所有可能从 s 获得的 有效 IP 地址 。你可以按任何顺序返回答案。
有效 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 地址。
解题思路
要找到对字符串的所有可能的分隔方式,所以要采用回溯的方法。
代码实现(明天再写一遍)
class Solution {
public List<String> restoreIpAddresses(String s) {
//保存最终的返回结果
List<String> address=new ArrayList<>();
StringBuilder tmpaddress=new StringBuilder();
if(s.length()==0){
return address;
}
trackback(s,address,tmpaddress,0);
return address;
}
public void trackback(String s,List<String> address,StringBuilder tmpaddress,int index){
if(index==4||s.length()==0){
if(index==4&&s.length()==0){
address.add(tmpaddress.toString());
}
return ;
}
//每个位置最多三位数
for(int i=0;i<s.length()&&i<=2;i++){
//不允许以零开头后面还有数字的情况
if(i!=0&&s.charAt(0)=='0'){
break;
}
String part=s.substring(0,i+1);
if(Integer.valueOf(part)<=255){
if(tmpaddress.length()!=0){
part='.'+part;
}
tmpaddress.append(part);
trackback(s.substring(i+1),address,tmpaddress,index+1);
tmpaddress.delete(tmpaddress.length()-part.length(),tmpaddress.length());
}
}
}
}