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

今日签到题,题目如下:

给定一个只包含数字的字符串,复原它并返回所有可能的 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 RestoreIpAddresses(string s) {
        List result = new List();
        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();
    }
}

 

你可能感兴趣的:(基础算法)