ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

LeetCode-93. 复原 IP 地址

2022-01-22 10:33:18  阅读:171  来源: 互联网

标签:cnt 1.1 示例 int IP 地址 93 LeetCode


题目来源

93. 复原 IP 地址

题目详情

有效 IP 地址 正好由四个整数(每个整数位于 0255 之间组成,且不能含有前导 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 中的任何数字。你可以按 任何 顺序返回答案。

示例 1:

输入: s = "25525511135"
输出: ["255.255.11.135","255.255.111.35"]

示例 2:

输入: s = "0000"
输出: ["0.0.0.0"]

示例 3:

输入: s = "1111"
输出: ["1.1.1.1"]

示例 4:

输入: s = "010010"
输出: ["0.10.0.10","0.100.1.0"]

示例 5:

输入: s = "101023"
输出: ["1.0.10.23","1.0.102.3","10.1.0.23","10.10.2.3","101.0.2.3"]

提示:

  • 0 <= s.length <= 20
  • s 仅由数字组成

题解分析

解法一:深度优先搜索 + 回溯

  1. 本题最容易想到的就是使用回溯的思想,依次递增位置变量来指示现在处理到的位置,直到遇到字符串结尾。
  2. 此外,需要设置一个cnt计数器来表示IP地址目前的第几个部分,只有当cnt == 4且遍历到原串结尾时才表示找到了符合条件的IP地址。
  3. 本题需要注意的是,合规的IP地址是不能包含前导0的,所以这里需要在代码中做一点额外的处理。
class Solution {
    List<String> res = new ArrayList<>();
    public List<String> restoreIpAddresses(String s) {
        dfs(s, 0, "", 0);
        return res;
    }
    private void dfs(String s, int pos, String ans, int cnt){
        if(cnt > 4){
            return;
        }
        if(pos == s.length()){
            if(cnt == 4){
                res.add(ans.substring(0, ans.length() - 1));
            }
            return;
        }
        int num = 0;
        for(int i=pos; i<s.length(); i++){
            char temp = s.charAt(i);
            if(i == pos && temp == '0'){
                dfs(s, i + 1, ans + "0.", cnt + 1);
                break;
            }
            num = num * 10 + temp - '0';
            ans = ans + temp;
            if(num >=0 && num <= 255){
                dfs(s, i + 1, ans + ".", cnt + 1);
            }else{
                break;
            }
        }
    }
}

结果展示

image

标签:cnt,1.1,示例,int,IP,地址,93,LeetCode
来源: https://www.cnblogs.com/GarrettWale/p/15832526.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有