8. 字符串转换整数 (atoi)

322 阅读1分钟

image.png

这道题对于题意的理解是比较重要的,
首先是去除空格,
其次是判断正负
随后是进行转化
随后是判断转化的数字是否超过范围 到这里应该就可以想到一个函数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。

第二种思路是利用正则表达式 首先先看一下正则表达式对于字符串的一个判断使用

image.png

解释一下这个表达式^表示以什么开头,(-|+)?表示要么事减号或者加号,这个符号要么是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; 
};