题目描述
题目链接:8. 字符串转换整数 (atoi).
题解
从前向后遍历字符串,依次做以下的操作
1、去掉前面的空格
2、判断是否有正负号,如果有负号,flag == 1
3、判断下一位是不是数字,如果是数字,更新res,如果不是数字,直接返回res
4、更新res之后要判断res是否越界。
可以通过:用last记录上一次的res,更新res之后用res/10 == last
来判断是否越界
详见代码注释
class Solution {
public int myAtoi(String s) {
//用来标记是否为负数
int flag = 0;
char[] c = s.toCharArray();
//res记录答案,last用来判断是否越界
int res = 0, last = 0;
//count用来记录遍历到哪一位
int count = 0;
//1、去掉前面的空格
while (count < c.length){
if (c[count] == ' ') count++;
else break;
}
//2、查看是否有正负号
if (count < c.length && c[count] == '-'){
flag = 1;
count++;
}else if (count < c.length && c[count] == '+'){
count++;
}
//3、处理数字
while (count < c.length){
//如果是数字,更新res
if (c[count] >= '0' && c[count] <= '9'){
last = res;
res = res * 10 + (c[count] - '0');
//当res / 10 != last,证明res越界了,根据正负号,返回最大或最小值
if (res / 10 != last){
return flag == 1 ? Integer.MIN_VALUE : Integer.MAX_VALUE;
}
}else break;//如果不是数字,跳出循环
count++;
}
//根据正负号返回结果
return flag == 1 ? -res : res;
}
}