题目
题目链接:leetcode-cn.com/leetbook/re…
题解
1、按照题意一步一步来
题目已经给了完整的算法,按照算法变成就行了,有以下要注意的点:
- 超出 32位有符号整数 的范围时的处理;
- '-+89' 或 '+-980' 返回的是 0;
/**
* @param {string} s
* @return {number}
*/
var myAtoi = function(s) {
let index = 0,
isMinus = false,
integer = 0;
const max_abs = Math.pow(2,31) - 1,
min_abs = Math.pow(2,31);
while(s[index] === ' '){
index++;
}
if(s[index] === '-'){
index++;
isMinus = true;
}else if(s[index] === '+'){
index++;
}
while(s[index] === '0') {
index++;
}
while(s[index] <= '9' && s[index] >= '0') {
integer = integer * 10 + Number(s[index]);
if( integer > max_abs && false === isMinus) {
return max_abs;
}
if( integer > min_abs && true === isMinus) {
return 0 - min_abs;
}
index++;
}
if(integer !== 0 && isMinus) {
return -integer;
}
return integer;
};
2、使用 JS Number对象给的 parseInt 方法
可以使用 JavaScript 的 Number对象给的 parseInt() 方法来进行字符串转整数,但是 parseInt() 的转换规则和题目规则并不是一摸一样,所以要对输出结果进行一定的修改判断;
- parseInt() 对非数值字符的处理输出是 NaN,而题目要求的不能处理的字符串输出 0;
- parseInt() 能转换 超过32位带符号整数的数值;
/**
* @param {string} s
* @return {number}
*/
var myAtoi = function(s) {
let n = parseInt(s);
const max = Math.pow(2,31) - 1,
min = 0 - Math.pow(2,31);
if(n.toString() === 'NaN') {
return 0;
}else if( n < min) {
return min;
}else if( n > max ) {
return max;
}
return n;
};
大家如果有更好的思路和解法,欢迎大家一起来讨论啊~
这是使用 JavaScript 对 LeetCode《初级算法》的每道题的总结和实现的其中一篇,汇总篇在这里: