解题思路
这个题目是要把一个字符串转成整数。按照以下思路:
- 判断是否正数还是负数
- 用一个value记录当前计算到的数值,每次找到一位就做乘10再加上新的数字
- 需要特别处理超过最大最小值的情况
参考源码
public class Solution {
public int myAtoi(String str) {
if (str == null || str.length() == 0) {
return 0;
}
char[] charts = str.toCharArray();
int length = charts.length;
int start = 0;
int flag = 1;
while (start < length && charts[start] == ' ') {
start++;
}
if (charts[start] == '-') {
flag = -1;
start++;
} else if (charts[start] == '+') {
flag = 1;
start++;
}
int max = Integer.MAX_VALUE / 10;
int value = 0;
while (start < length) {
if (!(charts[start] >= '0' && charts[start] <= '9')) {
break;
}
if (value < max) {
value = value * 10 + charts[start] - '0';
} else if (value > max) {
value = flag == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
break;
} else if (value == max) {
if (charts[start] - '0' > 7) {
value = flag == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
} else {
value = value * 10 + charts[start] - '0';
}
break;
}
start++;
}
return value * flag;
}
}