0%

8. String to Integer (atoi)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution:
def myAtoi(self, str: str) -> int:
res, MAX, MIN = 0, (1 << 31) - 1, -(1 << 31)
str = str.lstrip()
if not str: return 0
sign, i = 1, 0
if str[0] in '+-':
sign, i = 44 - ord(str[0]), 1
for i in range(i, len(str)):
if res > MAX or not str[i].isdigit(): break
res = res * 10 + int(str[i])
res *= sign
if res < MIN: return MIN
return res if res <= MAX else MAX
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
public:
int myAtoi(string str) {
if (str.empty()) return 0;
int n = str.length();
int b = 0;
while (str[b] == ' ') {
++b;
}
int sign = 1;
if (str[b] == '+' || str[b] == '-') {
sign = 44 - str[b];
++b;
}
long res = 0;
for (int i = b; i < n && isdigit(str[i]) && res <= INT_MAX; ++i) {
res = res * 10 + str[i] - '0';
}
res *= sign;
if (res < INT_MIN) return INT_MIN;
return res <= INT_MAX ? res : INT_MAX;
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
public:
int myAtoi(string str) {
long res = 0;
int n = str.length();
int b = 0;
// 去掉开始的空格
while (str[b] == ' ') {
++b;
}
int sign = 1;
if (str[b] == '-' || str[b] == '+') { // 判断符号,注意b++
if (str[b++] == '-') sign = -1;
}
for (int i = b; i < n && isdigit(str[i]) && res <= INT_MAX; ++i) { // 三个条件:不能越界、必须是数字、值不能超过INT_MAX(INT_MIN可行)
res = res * 10 + str[i] - '0';
}
res *= sign;
if (res > INT_MAX) return INT_MAX;
if (res < INT_MIN) return INT_MIN;
return res;
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
public:
int myAtoi(string str) {
if (str.empty()) return 0;
long res = 0;
int b = 0;
int n = str.length();
while (b < n && str[b] == ' ') {
++b;
}
bool ispos = true;
if (str[b] == '-') {
ispos = false;
++b;
} else if (str[b] == '+') {
++b;
}
for (int i = b; i < n && res <= INT_MAX && '0' <= str[i] && str[i] <= '9'; ++i) {
res = res * 10 + str[i] - '0';
}
return ispos ? min((long)INT_MAX, res) : max((long)INT_MIN, -res);
}
};