package leetcode; import java.util.ArrayList; import java.util.List; public class demo_93 { public List<String> restoreIpAddresses(String s) { List<String> list=new ArrayList<String>(); //不符合IP地址长度范围 if(s.length()>12||s.length()<4) {return list;} backtrack(s, list, new ArrayList<String>()); System.out.println(list); return list; } public void backtrack(String s,List<String> list,List<String> alist) { //每次取字符串前1-3的子串 for(int index=1;index<4;index++) { //防止最后取子串越界 try { String s2=s.substring(0,index); //除0外,不出现以0开头的数 if(s2.length()!=1&&s2.startsWith("0")) {break;} //每个位置的大小0-255 if(Integer.valueOf(s2)<0||Integer.valueOf(s2)>255) {break;} alist.add(s2); if(alist.size()<4) { backtrack(s.substring(index), list, alist); } //如果正好全部都能被分割完 if(alist.size()==4&&s.substring(index).equals("")) { String ss=""; for(String s1:alist) { ss=ss+s1+"."; } ss=ss.substring(0,ss.length()-1); //存入到list中 list.add(ss); } //如果被分割后还有剩余子串则继续 else { alist.remove(alist.size()-1); continue; } alist.remove(alist.size()-1); } catch (Exception e) { // TODO: handle exception break; } } } public static void main(String[] args) { // TODO Auto-generated method stub demo_93 d93=new demo_93(); String s="101023"; d93.restoreIpAddresses(s); } }