• 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"这种情况就不能处理,所以虽然我的代码有很多不足,但是如果把别人的代码当做答案我也觉得有些牵强,但是做题嘛,主要是锻炼思维,开心就好啦~

  • 相关阅读:
    如何查看ipynb文件
    使用python绘制爱心
    使用python将十进制数转为ip地址
    python使用下划线分割数字,提高可读性
    python的字符串基本操作
    pandas为csv添加新的行和列
    使用pandas库实现csv行和列的获取
    pycharm批量更改变量名
    (转)Doxygen文档生成工具
    MVC架构学习之Smarty学习——病来而蔫
  • 原文地址:https://www.cnblogs.com/magicy/p/5343754.html
Copyright © 2020-2023  润新知