给你一个包含数字的数组,返回所有可能组成ip的结果。如果没有返回false
输入:数组a为[2,5,5,2,5,5,1,1,1,3,5]
输出:[255.255.11.135, 255.255.111.35]
import java.util.ArrayList;
import java.util.List;
public class test001 {
public static void main (String[] args) {
test035 ip = new test035();
int[] a = new int[]{2,5,5,2,5,5,1,1,1,3,5};
// String s = a.toString();
String b="";
//对整型数组进行遍历,高级for循环
for(int i:a) {
//将整型数据变为字符串,valueof方法
String s1=String.valueOf(i);
//拼接字符串
b=b+s1;
}
List<string> res = ip.restoreIpAddresses(b);
if(res==null || res.isEmpty()){
System.out.println(false);
}else{
System.out.println(res);
}
}
public List<string> restoreIpAddresses(String s) {
List<string> ans = new ArrayList<>();//保存最终的所有结果
backtrack(s,0,new StringBuilder(),ans,0);
return ans;
}</string></string></string>
private void backtrack(String s,int st,StringBuilder t,List<String> ans,int c){ //如果剩余的长度大于剩下的部分都取 3 位数的长度,那么直接结束 if ( (s.length() - st) > (3*(4 - c))){ return; } //当前刚好到达了末尾 if (st == s.length()){ if (c == 4) {//加入结果 ans.add(new String(t.substring(0,t.length()-1))); } return; } //当前超过末位,或者已经到达了 4 部分结束掉 if (st>s.length()||c==4){ return; } //保存的当前的解 StringBuilder builder = new StringBuilder(t); //加入1 t.append(s.charAt(st)+""+'.'); backtrack(s,st+1,t,ans,c+1); if (s.charAt(st)=='0')return; //加入2#10 33 if(st+1<s.length()){ t = new StringBuilder(builder); t.append(s.substring(st,st+2)+""+'.'); backtrack(s,st+2,t,ans,c+1); } //加入3 #225 if(st+2<s.length()){ t = new StringBuilder(builder); int n =Integer.parseInt(s.substring(st,st+3)); if(n>=0&&n<=255){ t.append(s.substring(st,st+3)+""+'.'); backtrack(s,st+3,t,ans,c+1); } } }
}
欢迎交流指正~