题目链接: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; } }