/*
* [8] 字符串转换整数 (atoi)
*/
/**
* @param {string} s
* @return {number}
*/
const INT_MAX = (((1 << 30) - 1) << 1) + 1;
const INT_MIN = -1 << 31;
const MAX = Math.floor(INT_MAX / 10);
var myAtoi = function (s) {
let length = s.length;
let index = 0;
while (index < length && s[index] === ' ') {
index++;
}
if (index === length) {
return 0;
}
let sign = 1;
if (s[index] === '+') {
index++;
} else if (s[index] === '-') {
sign = -1;
index++;
}
let num = 0;
while (index < length && /[0-9]/.test(s[index])) {
let digit = Number(s[index]);
if (num > MAX || num < -MAX) {
return sign > 0 ? INT_MAX : INT_MIN;
} else if (num === MAX || num === -MAX) {
if (sign > 0 && digit > 7) {
return INT_MAX;
} else if (sign < 0 && digit > 8) {
return INT_MIN;
}
}
num = num * 10 + digit * sign;
index++;
}
return num;
};