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);
            }
        }
    }
  • 相关阅读:
    datagrid
    IntelliJ IDEA for mac 引入js注意事项
    centos7安装并配置svn
    yum使用总结
    安装php
    类视图
    django里面添加静态变量
    Ubuntu16.04安装&创建虚拟环境
    制作dockerfile, 天眼查的镜像、并运行
    dockerfile
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/14193863.html
Copyright © 2011-2022 走看看