LeetCode8

美丽的Solution

方案如下:
1、把字符串索引计数器 i 设在循坏外
2、遍历前部分是否有空格,有的话就忽略,直到不是空格,然后进入下一步
3、判断索引 i 位置是不是符号,如是则写入,然后i++,然后进入下一步
4、判断索引 i 位置是不是在0—9内,如是则写入,否则跳出
5、然后判断最后得到数字是否在Integer的范围内

int atoi(const char *str) {
    int sign = 1, base = 0, i = 0;
    while (str[i] == ' ') { i++; }
    if (str[i] == '-' || str[i] == '+') {
        sign = 1 - 2 * (str[i++] == '-'); 
    }
    while (str[i] >= '0' && str[i] <= '9') {
        if (base >  INT_MAX / 10 || (base == INT_MAX / 10 && str[i] - '0' > 7)) {
            if (sign == 1) return INT_MAX;
            else return INT_MIN;
        }
        base  = 10 * base + (str[i++] - '0');
    }
    return base * sign;
}

他这里用的base = 10 * base + (str[i++] - '0');这种方式
其实我们也可以用字符串转化为整形,也没差?
让后可以用JAVA中try和catch来处理超出了整形范围的值。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容