AcWing 87. 把字符串转换成整数-JavaScript
原题链接
中等
作者:
semicloud
,
2024-02-16 11:47:19
,
所有人可见
,
阅读 35
/**
* 返回字符 ch 是否是一个数字字符
* @param {string} ch
*/
function isDigit(ch) {
return ch.charCodeAt(0) >= 48 && ch.charCodeAt(0) <= 57;
}
/**
* @param {string} str
* @return {number}
*/
var strToInt = function(str) {
// 指针,用来迭代字符串
let p = 0;
// 忽略空格字符
while (str[p] === ' ') p++;
// 如果字符串只由空格组成,直接返回0
if (p === str.length) return 0;
//如果当前字符不是'+'、'-'或数字,就直接返回 0
if (!['+', '-'].includes(str[p]) && !isDigit(str[p])) return 0;
let base = 1;
// 如果当前字符是'-',说明是负数
if (str[p] === '-') base = -1;
if (str[p] === '+' || str[p] === '-') ++p;
if (p === str.length) return 0;
// 用来存在解析到的数字的数组
let digits = [];
while (p < str.length && isDigit(str[p])) {
digits.push(str[p]);
p++;
}
// 将解析到的数字字符转换为数字
let x = 0;
while (digits.length) {
x += (digits.pop() - '0') * base;
base *= 10;
}
// INT_MAX 和 INT_MIN 在正常范围内,因此直接判断就可以
const [INT_MAX, INT_MIN] = [2 ** 31 - 1, (-2) ** 31];
if (x > INT_MAX) return INT_MAX;
if (x < INT_MIN) return INT_MIN;
return x;
};