8. String to Integer (atoi)
题目简介
本题给了一个参数 s,要求我们将字符串 s 转成 32 位的整数
此外,题目要求:
- 忽略最前面的空白字符
- 需要考虑正负符号
-,+ - 忽略数字前面的 0,并且如果转换过程中遇到了数字以外的字符就要停止,返回当前转换的数字
- 如果转换的数字超过了 32 位,只需返回 32 位的最大值/最小值
Javascript
/**
* @param {string} s
* @return {number}
*/
var myAtoi = function (s) {
const ZERO = '0'.charCodeAt(0)
const POS_LIMIT = 2 ** 31 - 1
const NEG_LIMIT = -(2 ** 31)
const len = s.length
let res = 0
let i = 0
let sign = 1
// skip the leading space
while (i < len && s[i] === ' ') {
i++
}
// check the sign
if (s[i] === '-' || s[i] === '+') {
sign = s[i] === '-' ? -1 : 1
i++
}
while (i < len && s[i] >= '0' && s[i] <= '9') {
res = res * 10 + s[i].charCodeAt(0) - ZERO
if (sign * res > POS_LIMIT) {
return POS_LIMIT
}
if (sign * res < NEG_LIMIT) {
return NEG_LIMIT
}
i++
}
return res * sign
};