String to Integer (atoi)

题目分析

原题链接,登陆 LeetCode 后可用
题目整体要求是将一个字符串转换成对应的整数。但是实际做起题目来,会发现题目有很多细节的问题需要考虑。有以下一些特殊情况需要注意:

给定的字符串为 null
给定的字符串为 “”
字符串开头为若干个空格
字符串中间或末尾出现非 0~9 字符
转换后可能有溢出的情况
不考虑小数

null => 0
"" => 0
"abc" => 0
"+" => 0
"-" => 0
"+-098" => 0
"+098a322" => 98
"324aa" => 324
"    " => 0
"  22" => 22
"22  33" => 0

代码

class Solution {
    public int myAtoi(String str) {
        int i = 0;
        int res = 0;
        boolean sign = true;
        // 如果字符串为 null 值
        if(str == null) {
            return 0;
        }
        char[] sa = str.toCharArray();
        // 如果字符串为 ""
        if(sa.length == 0) {
            return 0;
        }
        while(i < sa.length) {
            if(sa[i] != ' ') {
                break;
            }
            i ++;
        }
        if(i == sa.length) {
            return 0;
        }
        if(sa[i] == '-') {
            sign = false;
        } else if(sa[i] == '+') {
            sign = true;
        } else if(sa[i] >= '0' && sa[i] <= '9') {
            res = sa[i] - '0';
        } else {
            return 0;
        }
        for(i += 1; i < sa.length; i++) {
            if(sa[i] >= '0' && sa[i] <= '9') {
                if(res > Integer.MAX_VALUE / 10 || (res == Integer.MAX_VALUE / 10 && sa[i] - '0' > 7)) {
                    return (sign == true) ? Integer.MAX_VALUE : Integer.MIN_VALUE;
                } else {
                    res = res * 10 + sa[i] - '0';
                }
            } else {
               break;
            }
        }
        if(!sign) {
            res = -res;
        }
        return res;
    }
}

你可能感兴趣的:(String to Integer (atoi))