Open fly0o0 opened 4 years ago
/**
* @param {string} str
* @return {number}
*/
var myAtoi = function(str) {
let i = 0
let negative = false
let MAX_INT = Math.pow(2, 31) - 1
let MIN_INT = -Math.pow(2, 31)
while (str[i] == ' ') {
i++
}
if (str[i] == '-') {
negative = true
i++
} else if (str[i] == '+') {
i++
} else if (str[i] < '0' || str[i] > '9') {
return 0
}
let ans = 0
while (i < str.length && (str[i] >= '0' && str[i] <= '9')) {
let tmp = str[i] - '0'
if (ans > MAX_INT) {
return MAX_INT
}
if (ans < MIN_INT) {
return MIN_INT
}
if (ans > (MAX_INT - tmp) / 10) {
// 本来应该是 ans * 10 + tmp > MAX_INT
// 但是 *10 和 + tmp 都有可能越界,所有都移动到右边去就可以了。
return negative ? MIN_INT : MAX_INT;
}
ans = ans * 10 + tmp
i++
}
return negative ? -ans : ans
};