93. 复原 IP 地址

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);
    }

}

 

上一篇:python学习笔记_第30天(冒泡排序+选择排序)


下一篇:Python坑:bool是int的子类、列表循环中的变量泄露、lambda在闭包中会保存局部变量、重用全局变量