zoukankan      html  css  js  c++  java
  • 题目:字符串转整数

    这个问题解答的思路跟上个翻转整数一样,都是通过long long类型存储一个结果字符串,然后返回int区域内大小的数字。

    这道题我出了好几次问题,后来才发现是因为没有仔细读题,题目只说了去除刚开始遇到的空格而我去除全部了。

    我写出的正确的代码如下(效率超过了100%):

    static const auto io_speed_up = []()
    {
        std::ios::sync_with_stdio(false);
        cin.tie(nullptr);
        return 0;
    }();
    
    class Solution {
    public:
        int myAtoi(string str) {
            size_t index    = 0;
            bool flag = false;
            long long res = 0;
            while (str[index] == ' ')
                ++index;
    
            if (str[index] == '-')
            {
                flag = true;
                ++index;
            }
            else if(str[index] == '+')
                ++index;
    
            while (str[index] >= '0' && str[index] <= '9' && res < INT_MAX)
            {
                res = res * 10 + str[index] - '0';
                ++index;
            }
            if (flag)
                res = -res;
            if (res > INT_MAX)
                return INT_MAX;
            if (res < INT_MIN)
                return INT_MIN;
            return (int)res;
        }
    };

    这道题有一个有意思的地方在于,传递的是一个字符串,那么最后一位即str[str.size()]位一定是一个''字符,这个字符必然不会满足数字字符或者空字符的条件。这意味着我们在做这道题中,只要设置好条件,就不用关心字符串长度的问题(每个循环都会少一次判断)。

  • 相关阅读:
    8 Django 模型层(1)
    7 Django的模板层
    Java ClassLoader
    Spring的注入注解
    Java 面试Spring的加载机制
    Spring容器启动初始化bean的方法
    java 线程
    经典博客
    Spring注解@Component、@Repository、@Service、@Controller区别
    java 实现多个文件的Zip包的生成
  • 原文地址:https://www.cnblogs.com/change4587/p/9170702.html
Copyright © 2011-2022 走看看