public class Solution {
    /**
     * 
     * @param s string字符串 
     * @return string字符串ArrayList
     */
    public ArrayList<String> restoreIpAddresses (String s) {
        // write code here
        ArrayList<String> result = new ArrayList<>();
        dfs(0,0,new StringBuilder(), result, s);
        return result;
    }
    private void dfs(int index, int depth, StringBuilder ip, ArrayList<String> result,String s){
        int length = ip.length();
        if(index == s.length()){
            if(depth == 4){
                //最后一个 将.删除
                ip.deleteCharAt(ip.length() - 1);
                result.add(ip.toString());
            }
        }
        for(int i = 1;i<= 3;i++){
            if(i + index > s.length()){
                break;
            }
            //截取字符串 
            int num = Integer.parseInt(s.substring(index, index + i));
            
            //非法  大于255 的,以及如果是两个0,转换后就是0不等于长度i 相当于自己删除了一个数字,没有xx.00.这种
            if(num > 255 || String.valueOf(num).length() != i){
                continue;
            }
            ip.append(num).append(".");
            //固定了第0个,下一次就是固定第1个去 
            dfs(index+i,depth + 1, ip, result, s);
            ip.setLength(length);
        }
    }
}