📌  相关文章
📜  第 16 天异常 - 字符串到整数hackerrank 解决方案 javascript (1)

📅  最后修改于: 2023-12-03 14:56:39.609000             🧑  作者: Mango

第 16 天异常 - 字符串到整数 Hackerrank 解决方案 (JavaScript)

在本篇文章中,我们将介绍如何解决 Hackerrank 上的“字符串到整数”问题的异常情况,使用 JavaScript 编程语言解决。

问题描述

给定一个字符串 s,请将其转换为整数。如果字符串无法转换为整数,则返回 0。请注意,只有正的或负的整数能够被转换为整数。

示例1:

输入: "42"

输出: 42

示例2:

输入: "-42"

输出: -42

示例3:

输入: "4193 with words"

输出: 4193

示例4:

输入: "words and 987"

输出: 0

解决方案

字符串转换为整数的问题可以通过 JavaScript 的内置函数 parseInt() 可以轻松解决。

const stringToInt = function (s) {
    const num = parseInt(s);
    if (isNaN(num)) { // 如果无法转换为整数则返回 0
        return 0;
    }
    return num;
}

使用 parseInt() 函数将字符串转换为整数。如果无法将字符串转换为整数,则会返回 NaN,这种情况下我们需要返回 0。如果可以转换为整数,则返回该整数。

注意:在 parseInt() 函数中,如果字符串的第一位为正号("+")或负号("-"),则将其作为符号位对待。如果没有指定第二个参数 radix,则使用默认值 10radix 参数指定一个介于 2 到 36 之间的整数,表示将要转换的数字的基数。例如,radix 为 2 表示该数字是二进制数,而 radix 为 16 表示该数字是十六进制数。

在实现上述解决方案时,我们还需要考虑以下几个点:

  1. 如果给定字符串为空或 null,则返回 0。
  2. 如果给定字符串开头是字符或包含非数字字符,则直接返回 0。

所以,在使用解决方案进行实现时,我们要仔细处理这些边缘情况。完整解决方案代码如下:

const stringToInt = function (s) {
    if (s === null || s.trim().length === 0) { // 非空校验
        return 0;
    }

    s = s.trim();

    let sign = 1;
    let i = 0;
    if (s[i] === "+") { // 处理符号位
        i++;
    } else if (s[i] === "-") {
        sign = -1;
        i++;
    }

    let result = 0;
    for (; i < s.length; i++) {
        if (s[i] < "0" || s[i] > "9") { // 处理非数字字符
            break;
        }

        result = result * 10 + (s[i] - "0");

        if (result * sign > 2147483647) { // 处理整数溢出
            return 2147483647;
        } else if (result * sign < -2147483648) {
            return -2147483648;
        }
    }

    return result * sign;
}

完整的解决方案代码已经考虑了所有的边缘情况,运行时间复杂度为 $O(n)$,n 为字符串的长度。此时,我们已经成功解决了“字符串到整数”这一 Hackerrank 问题的异常情况。