IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 多看看把,条件太多了--leetcode 93. 复原 IP 地址 -> 正文阅读

[数据结构与算法]多看看把,条件太多了--leetcode 93. 复原 IP 地址

难度:中等
频次:62

题目:

有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。

例如:“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “192.168@1.1” 是 无效 IP 地址。
给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 ‘.’ 来形成。你 不能 重新排序或删除 s 中的任何数字。你可以按 任何 顺序返回答案。

在这里插入图片描述

解题思路:DFS递归法+回溯<剪枝条件有点多>

注意:

  • 递归结束条件:temp数量为4了,并且start == s.length
  • 剪枝条件
    • temp数量为4了,但是start还没结束s的遍历
    • for循环里每次切分所得到的完整字符串不能越s的边界
    • for循环里 从start的位置切分时,如果切分的数量为2、3,那么第一位不能是0
    • for循环里 从start的位置切分时,如果切分数量位3时,3位数大小不能大于255
  • 最后得到的temp数组要转换成IP【StringBuilder】的格式(带.的长字符串),然后再添加到res里------这里有一个函数没怎么用 IP.deleteCharAt(n)
  • string转换成int Integer.parseInt(s);
  • 最后需要回溯,所以需要移除数组尾部刚添加的元素

代码

class Solution {
    //放的是最后修改过后的结果
    List<String> res=new ArrayList<>(); 
    //放的是修改结果格式之前的数字数组,没有.
    List<String> temp=new ArrayList<>();
    public List<String> restoreIpAddresses(String s) {
        DFS(s,0);
        return res;
    }
    public void DFS(String s,int start)
    {   
        //递归结束条件:start==s.length()-1 则说明经过上面的递归后,s还剩1位可以分配
        if(temp.size()==4&&start==s.length()){
            StringBuilder IP=new StringBuilder();
            for(String a:temp){
                IP.append(a).append(".");
            }
            //这个函数一般时候还真记不住
            IP.deleteCharAt(IP.length()-1);
            res.add(IP.toString());
            return;
        }
        //剪枝条件:1.如果temp.size==4&&start<s.length()
        if(temp.size()==4&&start<s.length()) return ;
        //切分 i=3是因为 每个ip的位置不能超过255   比如 123 start指向1 切分方式:1    12   123
        //最多四层
        for(int step=1;step<=3;step++){
            //切分的时候不能越界
            if(start+step-1>=s.length()) return;
            //2位和三位的时候--第一位不能是 01 022
            if(s.charAt(start)=='0'&&step!=1) return ;
            String smalltemp=s.substring(start,start+step);
            //如果裁剪出来的子字符串的数字比255大
            if(step==3&&Integer.parseInt(smalltemp)>255) return;
            temp.add(smalltemp);
            DFS(s,start+step);
            temp.remove(temp.size()-1);
        }
    }
}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-02-28 15:50:37  更:2022-02-28 15:53:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 16:49:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码