一、题目描述

存在一种虚拟 IPv4 地址,由4小节组成,每节的范围为0~255,以#号间隔, 虚拟 IPv4 地址可以转换为一个32位的整数,例如: 128#0#255#255,转换为32位整数的结果为2147549183(0x8000FFFF) 1#0#0#0,转换为 32 位整数的结果为16777216(0x01000000) 现以字符串形式给出一个虚拟 IPv4 地址,限制第1小节的范围为1~128, 即每一节范围分别为(1~128)#(0~255)#(0~255)#(0~255), 要求每个 IPv4 地址只能对应到唯一的整数上。 如果是非法 IPv4,返回invalid IP

备注: 输入不能确保是合法的 IPv4 地址, 需要对非法 IPv4(空串,含有 IP 地址中不存在的字符, 非合法的#分十进制,十进制整数不在合法区间内)进行识别,返回特定错误

二、输入描述

输入一行,虚拟 IPv4 地址格式字符串。

三、输出描述

输出以上,按照要求输出整型或者特定字符。

四、解题思路

  1. 读取输入的虚拟 IPv4 地址字符串,使用split方法将其按照"#"进行拆分,得到一个字符串数组arr,数组长度为4;
  2. 初始化变量count为0,用于记录转换后的32位整数;
  3. 初始化布尔变量flag为true,用于判断地址的合法性;
  4. 判断arr的长度是否为4,如果不为4,则将flag置为false;。
  5. 遍历arr数组,对每个字符串进行以下操作;
    • 将字符串转换为整数n。
    • 判断当前位置是否为第1小节(索引为0),如果是,则判断n是否在合法范围1~128之间,如果不是,则将flag置为false。
    • 判断n是否在合法范围0~255之间,如果不是,则将flag置为false。
    • 将n左移相应的位数(8*(3-i))并累加到count中。
  6. 根据flag的值判断地址的合法性,如果为true,则输出count;如果为false,则输出"invalid IP"。

该算法通过将虚拟 IPv4 地址转换为32位整数的方式进行处理,并同时判断地址的合法性。根据题目要求的范围限制和条件判断,遍历地址的每一节,将每一节的值转换为32位整数的对应位,并累加到count中。最后根据flag的值判断地址的合法性,并输出相应的结果。算法的时间复杂度为O(1),因为地址的长度固定为4。

五、Java算法源码

public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);
    String[] arr = sc.nextLine().split("#");
    int len = arr.length;
    long count = 0;
    boolean flag = true;

    if(len==4){
        for(int i=0;i<len;i++){
            long n = Integer.valueOf(arr[i]);
            if(i==0 && (n<1 || n>128)){
                flag = false;
                break;
            }else if(n<0 || n>255){
                flag = false;
                break;
            }
            /**
             * 1、使用把IP地址分成4个数字: 128 199 231 44
             * 2、把每个数字转换为2进制
             * 3、如果转换后这个数字对应的二进制数不够8位,在左侧补0: 10000000 11000111 11100111 00101100
             */
            count += n<<(8*(3-i));
        }
    }else {
        flag = false;
    }

    if(flag){
        System.out.println(count);
    }else {
        System.out.println("invalid IP");
    }
}

六、效果展示

输入10#20#30#40

输出169090600

华为OD机试真题B卷 Java 实现【IPv4地址转换成整数】,附详细解题思路-LMLPHP


🏆下一篇:华为OD机试真题 Java 实现【基站维修工程师】【2023Q1 200分】,附详细解题思路

🏆本文收录于,华为OD机试(JAVA)(2022&2023)

本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。

06-02 23:40