力扣刷题笔记 93. 复原IP地址 C#

这是一篇关于力扣(LeetCode)第93题的解题笔记,题目要求从给定的数字字符串中复原所有可能的IP地址格式。文章介绍了使用暴力枚举的方法,通过三次循环实现,时间复杂度为O(3^3),空间复杂度为O(1)。作者分享了自己的C#代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今日签到题,题目如下:

给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。

有效的 IP 地址正好由四个整数(每个整数位于 0 到 255 之间组成),整数之间用 '.' 分隔。

 

示例:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/restore-ip-addresses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

想了许久,想不到什么好方法,看题解,原来都是暴力解。。。。

暴力解就没什么好说的,就是注意遍历区间和跳出枚举的条件。

复杂度分析:

3次嵌套循环,但是每次最多只循环3次,时间复杂度 O(3*3*3);

只有使用一个列表保存结果,没有其他额外空间,空间复杂度O(1)。

以下为自己提交的代码:

public class Solution {
    public IList<string> RestoreIpAddresses(string s) {
        List<string> result = new List<string>();
        int lenI = Math.Min(3, s.Length - 3);
        int lenS = s.Length + 3;
        for (int i = Math.Max(0, s.Length - 10); i < lenI; i++)
        {
            int a = int.Parse(s.Substring(0,i + 1));
            if (a > 255) break;
            int lenJ = Math.Min(i + 4, s.Length - 2);
            for (int j = Math.Max(i + 1, s.Length - 7); j < lenJ; j++)
            {
                int b = int.Parse(s.Substring(i + 1,j-i));
                if (b > 255) break;
                int lenK = Math.Min(j + 4, s.Length - 1);
                for (int k = Math.Max(j + 1, s.Length - 4); k < lenK; k++)
                {
                    int c = int.Parse(s.Substring(j + 1,k-j));
                    if (c > 255) break;
                    int d = int.Parse(s.Substring(k + 1,s.Length - k - 1));
                    if (d > 255) continue;
                    string temp = a.ToString() + '.' + b.ToString() + '.' + c.ToString() + '.' + d.ToString();
                    if (temp.Length == lenS)
                    result.Add(temp);
                }
            }
        }
        return result.ToArray();
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值