一、题目描述
IPV4地址可以用一个32位无符号整数来表示,一般用点分方式来显示,点将IP地址分成4个部分,每个部分为8位,表示成一个无符号整数(因此正号不需要出现),如10.137.17.1,是我们非常熟悉的IP地址,一个IP地址串中没有空格出现(因为要表示成一个32数字)。
现在需要你用程序来判断IP是否合法。
二、输入描述
输入一个ip地址,保证不包含空格。
三、输出描述
返回判断的结果YES or NO。
四、解题思路
- 输入一个IP地址,将其存储为字符串str;
- 使用.作为分隔符,将IP地址拆分为字符串数组nums;
- 初始化结果result为"YES";
- 判断拆分后的nums数组长度是否为4,如果不为4,则IP地址不合法,将result设置为"NO";
- 遍历nums数组中的每个元素,判断每个元素是否合法;
- 对于每个元素,检查其长度是否为0或大于3,如果是,则IP地址不合法,将result设置为"NO";
- 对于每个元素,遍历其每个字符,检查是否为数字,如果不是,则IP地址不合法,将result设置为"NO";
- 对于每个元素,检查其是否以0开头且长度不为1,如果是,则IP地址不合法,将result设置为"NO";
- 对于每个元素,将其转换为整数并检查是否大于255,如果大于255,则IP地址不合法,将result设置为"NO";
- 输出result;
五、Java算法源码
function isValidIP(ip) {
const nums = ip.split('.');
let result = 'YES';
if (nums.length === 4) {
// 遍历每个元素,合不合法
for (const element of nums) {
// 每段长度等于0,或者长度大于4,都不合法
if (element.length === 0 || element.length > 3) {
result = 'NO';
break;
}
for (const ch of element) {
// 每段的字符必须是数字
if (!Number.isInteger(Number(ch))) {
result = 'NO';
break;
}
}
// 除0以外,所有0开头的字符串都是非法
if (element.charAt(0) === '0' && element.length !== 1) {
result = 'NO';
break;
}
// 每段对应的数大于255,也是非法的
if (parseInt(element) > 255) {
result = 'NO';
break;
}
}
} else {
result = 'NO';
}
return result;
}
六、效果展示
🏆华为OD机试真题 Java 实现【合法IP】【牛客练习题】
🏆下一篇:华为OD机试真题 Java 实现【基站维修工程师】【2023Q1 200分】,附详细解题思路
🏆本文收录于,华为OD机试(JAVA)(2022&2023)
本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。