LeetCode《初级算法》字符串之字符串转换整数 -- JavaScript

361 阅读1分钟

题目

题目链接:leetcode-cn.com/leetbook/re…

image.png

题解


1、按照题意一步一步来

题目已经给了完整的算法,按照算法变成就行了,有以下要注意的点:

  • 超出 32位有符号整数 的范围时的处理;
  • '-+89' 或 '+-980' 返回的是 0;
/**
 * @param {string} s
 * @return {number}
 */
var myAtoi = function(s) {

    let index = 0,
        isMinus = false,
        integer = 0;

    const max_abs = Math.pow(2,31) - 1,
        min_abs = Math.pow(2,31);


    while(s[index] === ' '){
        index++;
    }

    if(s[index] === '-'){
        index++;
        isMinus = true;
    }else if(s[index] === '+'){
        index++;
    }
    

    while(s[index] === '0') {
        index++;
    }

    while(s[index] <= '9' && s[index] >= '0') {

        integer = integer * 10 + Number(s[index]);
        if( integer > max_abs && false === isMinus) {
            return max_abs;
        }
        if( integer > min_abs && true === isMinus) {
            return 0 - min_abs;
        }
        index++;

    }

    if(integer !== 0 && isMinus) {
        return -integer;
    }
    return integer;
};


2、使用 JS Number对象给的 parseInt 方法

可以使用 JavaScript 的 Number对象给的 parseInt() 方法来进行字符串转整数,但是 parseInt() 的转换规则和题目规则并不是一摸一样,所以要对输出结果进行一定的修改判断;

  • parseInt() 对非数值字符的处理输出是 NaN,而题目要求的不能处理的字符串输出 0;
  • parseInt() 能转换 超过32位带符号整数的数值;
/**
 * @param {string} s
 * @return {number}
 */
var myAtoi = function(s) {

    let n = parseInt(s);
    const max = Math.pow(2,31) - 1,
        min = 0 - Math.pow(2,31);

    if(n.toString() === 'NaN') {
        return 0;
    }else if( n < min) {
        return min;
    }else if( n > max ) {
        return max;
    }

    return n;
};

大家如果有更好的思路和解法,欢迎大家一起来讨论啊~

这是使用 JavaScript 对 LeetCode《初级算法》的每道题的总结和实现的其中一篇,汇总篇在这里:

juejin.cn/post/700669…