【leetcode】8. 字符串转换整数 (atoi)(Java)

题目描述

题目链接:8. 字符串转换整数 (atoi).
【leetcode】8. 字符串转换整数 (atoi)(Java)

题解

从前向后遍历字符串,依次做以下的操作
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;
    }
}
上一篇:算法(leetode,附思维导图 + 全部解法)300题之(8)字符串转换整数 (atoi)


下一篇:LeetCode——8. 字符串转换整数 (atoi)