题目:作一个 aoti
功能的函数。与 C语言
中不同的是不能转换的值为 -1 ,且遇到非数字串即刻停止,返回当前解。– Leetcode-008
举例:
num = ' 0123a23'
=> 123
num = ' b12'
=> 0
思路:
- 求值为一个渐进过程
- 求值终止条件为 [^\d+-\s]
- result = result * 10 + n
代码如下:
/**
* @param {string} str
* @return {number}
*/
var myAtoi = function(str) {
var numString = false;
var first = false;
var pre = 0;
var sign = 0;
var result = 0;
for(var i in str){
if('0'<=str[i] && str[i]<='9') {
if(!first) first = true;
else if(pre != i - 1)
// return result*(sign>-1?1:-1) > 2147483647?2147483647:result*(sign>-1?1:-1);
break;
result = result * 10 + (str[i] - '0');
pre = i;
} else if(str[i] === '+' || str[i] === '-'){
if(sign) return 0;
else sign = str[i] === '+' ? 1 : -1;
pre = i;
first = true;
}else if(str[i] !==' ') {
break;
}
//console.log(result)
}
return ((result - 2147483647 > 0 ? (2147483647 + ((sign>-1)?0:1)) : result) )*(sign>-1?1:-1);
};
其中题目的特殊要求,取 2147483647
作为 绝对值
最大界限。