请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。

思路

  1. 根据题目描述的逻辑实现即可
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
var myAtoi = function (s) {
if (!s) {
return 0
}
const MIN_VAL = -1 << 31
const MAX_VAL = (1 << 30) - 1 + (1 << 30)
let startIndex = 0
while (s[startIndex] === ' ') {
++startIndex
}
let factor = 1
if (s[startIndex] === '+') {
++startIndex
} else if (s[startIndex] === '-') {
factor = -1
++startIndex
}
let result = 0
for (let i = startIndex; i < s.length; ++i) {
if (!/^[0-9]$/.test(s[i])) {
break
}
const val = Number(s[i])
if (factor < 0) {
if ((MIN_VAL + val) / 10 > -result) {
return MIN_VAL
}
} else {
if ((MAX_VAL - val) / 10 < result) {
return MAX_VAL
}
}
result = result * 10 + val
}
return result * factor
}