93. 复原IP地址

回溯

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

class Solution {

    List<String> list = new ArrayList<>();
    LinkedList<String> li = new LinkedList<>();

    public List<String> restoreIpAddresses(String s) {

        /**
         * 减枝
         */
        if (s.length() < 4 || s.length() > 12){
            return list;
        }

        backtracking(s, 0);
        return list;
    }

    public void backtracking(String s, int startIndex){

        /**
         * 终止条件
         * 当存储的合法数字为4个且索引到了末尾时,保留结果
         * String.join()直接将列表连接成字符串
         */
        if (li.size() == 4){

            if (startIndex == s.length()) {
                list.add(String.join(".", li));
            }
            else {
                return;
            }
        }

        for (int i = startIndex; i < s.length(); i++) {

            if (verify(s.substring(startIndex, i + 1))){

                li.add(s.substring(startIndex, i + 1));
                backtracking(s, i + 1);
                li.removeLast();
            }
            else {
                break;
            }
        }
    }

    /**
     * 判断数字是否合法
     */
    public boolean verify(String s){

        if (s.length() <= 1){
            return true;
        }
        else if (s.length() > 3) {
            return false;
        }
        else {

            if (s.charAt(0) == '0'){
                return false;
            }
            else {
                return Integer.parseInt(s) <= 255;
            }
        }
    }
}

/**
 * 时间复杂度 O(3^4×|s|)
 * 空间复杂度 O(1)
 */

https://leetcode-cn.com/problems/restore-ip-addresses/

posted @ 2022-01-11 22:41  振袖秋枫问红叶  阅读(51)  评论(0)    收藏  举报