Count IP Addresses

Write a function that accepts a starting and ending IPv4 address, and returns the number of IP addresses from start to end, excluding the end IP address.
All input to the ipsBetween function will be valid IPv4 addresses in the form of strings. The ending address will be at least one address higher than the starting address.

Examples:
ipsBetween("10.0.0.0", "10.0.0.50") => returns 50
ipsBetween("10.0.0.0", "10.0.1.0") => returns 256
ipsBetween("20.0.0.10", "20.0.1.0") => returns 246

大意:嗯就是算IP地址的差

复习一下IP是什么呢,这里也不扯太深入的(我才不会说自己也搞不懂呢)

网络之间互连的协议(IP)是Internet Protocol的缩写,中文简称网协(摘自百度百科)

然后呢IP地址就是给每个连接在互联网上的主机分配的一个32位地址,划重点,32位就是32个二进制位,那么问题的解法就来了

IP地址转换为32二进制位,然后相减取十进制差

附上代码:

import java.text.DecimalFormat;

public class CountIPAddresses {
    public static long ipsBetween(String start, String end) {
        DecimalFormat df = new DecimalFormat("00000000");
        StringBuilder startBinary = new StringBuilder();
        StringBuilder endBinary = new StringBuilder();
        String[] strartArr = start.split("\\u002E");
        String[] endArr = end.split("\\u002E");
        for (String s : strartArr){
            startBinary.append(df.format(Integer.valueOf(Integer.toBinaryString(Integer.parseInt(s)))));
        }
        for (String s : endArr){
            endBinary.append(df.format(Integer.valueOf(Integer.toBinaryString(Integer.parseInt(s)))));
        }
        return Long.valueOf(endBinary.toString(),2) - Long.valueOf(startBinary.toString(),2);
    }
}

PS:. 符号需要转义

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
给定一个只包含数字的字符串,用以表示一个 IP 地址,要求恢复出所有可能的 IP 地址。这是一个典型的回溯算法问题,可以通过递归实现。具体步骤如下: 1. 定义一个数组 `segments`,用于存储 IP 地址的四个段; 2. 定义一个变量 `start`,表示当前处理到字符串的哪个位置; 3. 定义一个变量 `segmentCount`,表示已经处理了几个段; 4. 如果已经处理了四个段并且字符串已经处理完毕,则将 `segments` 中的四个段拼接成一个 IP 地址,并将其加入结果集; 5. 如果已经处理了四个段但字符串还没有处理完毕,则直接返回; 6. 如果还没有处理完四个段但字符串已经处理完毕,则直接返回; 7. 对于每个段,从 `start` 开始,枚举可能的结束位置,如果这个段合法,则将其加入 `segments` 数组中,并递归处理下一个段; 8. 处理完当前段后,需要将 `segments` 数组中的当前段删除,以便处理下一个可能的结束位置。 代码如下(Python实现): ```python class Solution: def restoreIpAddresses(self, s: str) -> List[str]: def backtrack(start: int, segmentCount: int): if segmentCount == 4: if start == n: ip = ".".join(str(seg) for seg in segments) res.append(ip) return if start == n: return if s[start] == "0": segments[segmentCount] = 0 backtrack(start + 1, segmentCount + 1) addr = 0 for end in range(start, n): addr = addr * 10 + int(s[end]) if 0 < addr <= 255: segments[segmentCount] = addr backtrack(end + 1, segmentCount + 1) else: break n = len(s) if n < 4 or n > 12: return [] segments = [0] * 4 res = [] backtrack(0, 0) return res ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值