其他分享
首页 > 其他分享> > leetcode-8

leetcode-8

作者:互联网

https://leetcode-cn.com/problems/string-to-integer-atoi/

思路:先判断空格,接着判断+-号,最后对数字进行处理,同时注意边界值处理。由于值域[-2147483648,2147483647],故在边界处理上只需要处理大于2147483647即可。负数可以标记位处理

int myAtoi(string s) {
    if (s == "") {
        return 0;
    }
    long res = 0;
    int i = 0;
    while(s[i] == ' ') {
        i += 1;
        if (i >= s.length()) {
            return 0;
        }
    }
    int sign = 1;
    if (s[i] == '-') {
        sign = -1;
    }

   //+-符号只允许存在一个,两个同时出现时,返回0
    if (s[i] == '+' || s[i] == '-') {
        i++;
    }
    for (; i < s.length(); i++) {
        if (s[i] >= '0' and s[i] <= '9') {

            //此处不能用>=,利用尾数来判断是否大于7,大于7的(2147483647 - 9 / 10 一定小于214748364)小于7的话(2147483647 - 1 /10 一定等于214748364),例子:2147483641、2147483649
            if (res > (INT_MAX - (s[i] - '0')) / 10 ) {
                if (sign == 1) {
                    return INT_MAX;
                } else {
                    return INT_MIN;
                }
            }
            res = res * 10 + (s[i] - '0');
        } else {
            return res * sign;
        }
    }
    return res * sign;
}

标签:10,return,int,res,sign,2147483647,leetcode
来源: https://blog.csdn.net/shushi6969/article/details/113677964