这道题对于题意的理解是比较重要的,
首先是去除空格,
其次是判断正负
随后是进行转化
随后是判断转化的数字是否超过范围
到这里应该就可以想到一个函数parseInt,其满足了前三个,最后一个不满足,所以只需要在这个基础上进行一个判断。
var myAtoi = function(s) {
var getNum = function(num) {
if (num >= -Math.pow(2,31) && num <= Math.pow(2,31) -1) {
return num;
}else {
return num > 0 ? Math.pow(2,31) -1 : -Math.pow(2,31);
}
};
let res = parseInt(s);
if (isNaN(res)) {
return 0;
} else {
return getNum(res);
}
};
需要注意的是parseInt如果失败的话,返回的是NAN,可以这样理解因为;parseInt是转化为number的,如果转化失败的话自然会转化为NAN。
第二种思路是利用正则表达式 首先先看一下正则表达式对于字符串的一个判断使用
解释一下这个表达式^表示以什么开头,(-|+)?表示要么事减号或者加号,这个符号要么是0次要么是1次。 \d+:\d代表数次,+代表至少1次出现。
var myAtoi = function(s) {
let res = s.trim().match(/^(-|\+)?\d+/g);
return res ? Math.max(Math.min(res[0],Math.pow(2,31)-1), -Math.pow(2,31)) : 0;
};