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来处理超出了整形范围的值。

你可能感兴趣的:(LeetCode8)