华为OD机试真题 JavaScript 实现【IPv4地址转换成整数】【2023 B卷 100分】

在这里插入图片描述

一、题目描述

存在一种虚拟 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。

五、JavaScript算法源码

function calculate(input) {
    if (!input) {
        console.log('invalid IP'); // 空串属于非法 IPv4 地址
    } else {
        const arr = input.split('#'); // 将地址按照"#"进行拆分,得到一个字符串数组arr,数组长度为4
        if (arr.length !== 4) { // 地址格式不正确,属于非法 IPv4 地址
            console.log('invalid IP');
        } else {
            let count = 0; // 初始化变量count为0,用于记录转换后的32位整数
            let flag = true; // 初始化布尔变量flag为true,用于判断地址的合法性
            for (let i = 0; i < 4; i++) { // 遍历arr数组,对每个字符串进行处理
                const n = parseInt(arr[i]); // 将当前字符串转换为整数n
                if (isNaN(n) || n < 0 || n > 255) { // 非法十进制整数,属于非法 IPv4 地址
                    flag = false;
                    break;
                }
                if (i === 0 && (n < 1 || n > 128)) { // 第1小节范围不符合要求,属于非法 IPv4 地址
                    flag = false;
                    break;
                }
                count |= n << (8 * (3 - i)); // 将n左移相应的位数并累加到count中
            }
            if (flag) { // 地址合法,输出32位整数count
                return count;
            } else { // 地址非法,输出"invalid IP"
                console.log('invalid IP');
            }
        }
    }
}

六、效果展示

1、输入

10#20#30#40

2、输出

169090600

华为OD机试真题 JavaScript 实现【IPv4地址转换成整数】【2023 B卷 100分】_第1张图片


下一篇:华为OD机试真题 JavaScript 实现【相对开音节】【2022Q4 100分】,附详细解题思路

本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)

每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

你可能感兴趣的:(javascript,算法,java,华为,学习)