题目:字符串转换整数
leetCode链接:字符串转换整数
说明:请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。
函数 myAtoi(string s) 的算法如下:
读入字符串并丢弃无用的前导空格 检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。 读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。 将前面步骤读入的这些数字转换为整数(即,"123" -> 123, "0032" -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。 如果整数数超过 32 位有符号整数范围 [−2的31次方, 2的31次方 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −2的31 的整数应该被固定为 −2的31次方 ,大于2的31次方 − 1 的整数应该被固定为 2的31次方 − 1 。 返回整数作为最终结果。 注意:
本题中的空白字符只包括空格字符 ' ' 。 除前导空格或数字后的其余字符串外,请勿忽略 任何其他字符。
理解:
1、有一个可能包含空格,+-号,字母,数字等的字符串,将它转换成一个32位有符号的整数
2、去除或忽略字符串空格
3、字符数值部分前面不能有多个符号位,否则返回0
4、字符不能只有符号位,空格或者字符,否则返回0
5、保留字符中数值前必要的符号位
6、得到的数值不能大于2的31次方减1,也不能小于-2的31次方
思路:
1、借助JS的parseInt API完成数值的转换,它有如下特点:
- 无视开头空格(√)
- 返回有符号整数(√)
- 无视整数部分后的字符(√)
- 范围在
32位内(含)(x) - 其他情况返回
0(x)
返回值: 如果被解析参数的第一个字符无法被转化成数值类型,则返回NaN。
2、字符判断,将不满足格式的字符串返回0,最终返回所需的数值
题解:
/**
* @param {string} s
* @return {number}
*/
var myAtoi = function(s) {
const number = parseInt(s, 10);
if(isNaN(number)) {
return 0;
} else if (number < Math.pow(-2, 31) || number > Math.pow(2, 31) - 1) {
return number < Math.pow(-2, 31) ? Math.pow(-2, 31) : Math.pow(2, 31) - 1;
} else {
return number;
}
};
总结:
本篇提供了下字符串转换整数的实现,在给出的方案中,代码比较简单,但是刚开始要联系上该API,如果不了解,可能还有点难度,毕竟题目涉及的各种可能测试失败的符号比较多,偏偏这个API都完美的处理掉了,至于思路2,虽然有想法了,但是在写代码过程中,还是碰到点问题,鉴于时间问题,暂时不再继续深究,后续再补上吧,给自己加个TODO。