Skip to content

实现parseInt函数 #5

@AILINGANGEL

Description

@AILINGANGEL

parseInt的解析规则

leetcode

  • 遇到第一个非空格的字符开始解析
  • 如果第一个字符不是符号(+或者-)也不是数字就返回0
  • 一直解析到不是数字为止
  • 如果是正数最大值为2 ^ 31 - 1
  • 如果是负数最小值为-2^31
var myAtoi = function(str) {
    str = str.trim(); // 去除前面的空格
    let len = str.length;
    let sign = 1; // 符号位, 1表示正数,-1表示负数
    let regex = /\d/;
    let ans = 0;
    // 如果是空字符串或者不是以数字,符号位开头就直接返回
    if (len === 0 || (!regex.test(str[0]) && !/[-+]/.test(str[0]))) return ans;
    let i = 0;
   // 检测第一个字符是否是符号位
    if (/[-+]/.test(str[i])) {
        if(str[0] === '-') {
            sign = -1;
        }
       i++;
    }
    let max = Math.pow(2, 31);
    while (i < len) {
        if (!regex.test(str[i])) {
            break;
        }
        // 判断数字是否会溢出
        if (ans >= (max - str[i]) / 10) {
            if (sign === 1) {
                return max - 1;
            } else {
                return -max;
            }
        }
        ans = ans * 10 + (+str[i]);
        i++;
    }
    return ans * sign;
};

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions