8. String to Integer (atoi)

文章目录如下

(1)自己的思路

(2)自己的代码

(3)别人的思路

(4)别人的代码

(5)对比自己的不足之处

(1)自己的思路

 首先这道题的核心思想是数字与字符之间的转换,两个的联系便是ASCI码的关联。即如果字符x在'0'到'9'之间,那么x-'0'便是x对应的真是的数值。在具体构造返回数值方面,与上一篇思路差不多。

(2)自己的代码

class Solution {
public:
    int myAtoi(string str) {

        //使用ascii码转换即可  48-57

        int tmp = 0;

        for (int i = 0; i<str.length(); i++)
        {
            if (str[i] >= '0'&&str[i] <= '9')
            {
                tmp = tmp * 10 + (str[i] - '0');
            }
        }

        if (str[0] == '-')
            tmp = 0 - tmp;
        return tmp;
    }
};

(3)思路与我差不多,但是考虑到了空格,+,-号的问题

(4)别人的代码

class Solution {
public:
    int myAtoi(string str) {
        int num = 0;
        int sign = 1;
        const int n = str.length();
        int i = 0;

        while (str[i] == ' ' && i < n) i++;

        if (str[i] == '+') {
            i++;
        }
        else if (str[i] == '-') {
            sign = -1;
            i++;
        }

        for (; i < n; i++) {
            if (str[i] < '0' || str[i] > '9')
                break;
            if (num > INT_MAX / 10 ||
                (num == INT_MAX / 10 &&
                    (str[i] - '0') > INT_MAX % 10))
            {
                return sign == -1 ? INT_MIN : INT_MAX;
            }

            num = num * 10 + str[i] - '0';
        }
        return num * sign;
    }
};

(5)对比自己的不足之处

其实关于别人的答案我也有着自己的质疑,例如"--2342"这种情况就不能处理,所以虽然我的代码有很多不足,但是如果把别人的代码当做答案我也觉得有些牵强,但是做题嘛,主要是锻炼思维,开心就好啦~

原文地址:https://www.cnblogs.com/magicy/p/5343754.html