思路:
- 去掉前导空格
- 处理正负号
- 识别数字,处理越界情况。
/**
* @param {string} str
* @return {number}
*/
var myAtoi = function(str) {
var charArr = str.split("")
var len = str.length
var index = 0
// 去掉前导空格
while(index < len && charArr[index] == ' '){
index++
}
if(len == index){
return 0
}
var positiveSign = true
if(charArr[index] == '-'){
//遇到负号
positiveSign = false
index++
} else if(charArr[index] == '+'){
// 遇到正号
index++
} else if(!(/^\d+$/.test(charArr[index]))){
// 其他符号
return 0
}
var ans = 0
while(index < len && /^\d+$/.test(charArr[index])){
var digit = charArr[index] - '0'
// 处理越界
// −2^31 = -2147483648 231 − 1 = 2147483647
if(ans > (2147483647 - digit) / 10){
return positiveSign ? 2147483647 : -2147483648
}
ans = ans * 10 + digit
index++
}
return positiveSign ? ans : -ans
};