zoukankan      html  css  js  c++  java
  • LeetCode93. 复原IP地址

    ☆☆☆☆思路:回溯算法.

          回溯算法事实上就是在一个树形问题上做DFS。因此,需要先将原问题转化为树形问题

          每一个节点可以选择截取的方法有三种:截1位、截2位、截3位。因此每一个结点可以生长出的分支最多只有 3 条分支;

          由于 ip 段最多就 4 个段,因此这棵三叉树最多 4 层,这个条件作为递归终止条件之一;

    class Solution {
        public List<String> restoreIpAddresses(String s) {
            List<String> res = new ArrayList<>();
            if (s.length() < 4 || s.length() > 12) return res;
            dfs(s, 0, new ArrayList<>(), res);
            return res;
        }
        private void dfs(String s, int pos, List<String> list, List<String> res) {
            if (list.size() == 4) {
                if (pos == s.length()) {
                    // join 用法:例如 [[255],[255],[111],[35]] -> 255.255.111.35
                    res.add(String.join(".", list));
                }
                return;
            }
            // ip 地址每段最多有三个数字
            for (int i = 1; i <= 3; i++) {
                if (pos + i > s.length()) {
                    break;
                }
                String tmp = s.substring(pos, pos + i);
                // 剪枝条件:段的起始位置不能为 0,段拆箱成 int 类型的长度不能大于 255
                int val = Integer.parseInt(tmp);
                if (tmp.startsWith("0") && tmp.length() > 1 || (i == 3 && val > 255)) {
                    continue;
                }
                list.add(tmp);
                dfs(s, pos + i, list, res);
                list.remove(list.size() - 1);
            }
        }
    }
  • 相关阅读:
    解决通用串行总线(USB)控制器有感叹号
    开发者需要了解的WebKit
    Win7系统搭建WiFi热点详细攻略
    给Qt生成的exe执行程序添加版本信息
    IIS(IISReset.exe)命令行
    .net开发微信公众平台
    使用ExitProcess()结束本进程、TerminateProcess 结束进程
    Hosts文件路径及修改方法
    本地动态SQL
    Oracle Package
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/14193863.html
Copyright © 2011-2022 走看看