Leetcode 8 String to Integer (atoi)

Implement atoi to convert a string to an integer.

Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.

Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.

Update (2015-02-10): The signature of the C++ function had been updated. If you still see your function signature accepts a const char * argument, please click the reload button  to reset your code definition.

挺简单又挺难的一道题,就是坑太多,已经不是丧心病狂能形容了,估计这也是算法竞赛和这种面试题之间的区别吧。

好吧,我承认我WA了10发,坑点请看代码注释。

class Solution {
public:
    int myAtoi(string str) {
        if(str.length()==0) // 1.空串
            return 0;
        int flag=0,first=0;
        while(str[first]==' ')// 2.前置空格去除
            first++;
        if(str[first]=='-') //3.负号
        {
            flag=1;
            first++;
        }
        else if(str[first]=='+')//4.还尼玛能出现正号,正负号只在开头出现一次的是合法的
            first++;
        if(str[first]<'0' || str[first]>'9') //5.除了正负号和数字还可能有其他字符,判为0
            return 0;
        long long ans=0;
        int cnt=0;
        for(int i=first;i<str.length();i++)
        {
            cnt++;
            if(cnt>17) //6.位数过大溢出longlong,更不用说int了
            {
                if(flag)
                    return INT_MIN;
                else
                    return INT_MAX;
            }
            if(str[i]<'0' || str[i]>'9') //7.中途出现其他字符要中断,但前面的数字依旧视为合法的
                break;
            ans*=(long long)10;
            ans+=(long long)(str[i]-'0');
        }
        if(flag)
            ans=-ans;
        if(ans>INT_MAX)//8.int溢出处理
            return INT_MAX;
        if(ans<INT_MIN)
            return INT_MIN;
        return (int)ans;
    }
};

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏深度学习之tensorflow实战篇

稀疏矩阵压缩sparse.csr_matrix函数与sparse.csc_matric详解

概述 在用python进行科学运算时,常常需要把一个稀疏的np.array压缩,这时候就用到scipy库中的sparse.csr_matrix(csr:Comp...

4695
来自专栏程序员宝库

LCS 算法:Javascript 最长公共子序列

作者:司徒正美 链接:https://segmentfault.com/a/1190000012864957 最长公共子序列(Longest Common Su...

58310
来自专栏测试开发架构之路

数据库系统关系模型概念

关系模型简述 关系模型就是处理TABLE,它由三部分组成:  描述DB各种数据的基本结构形式(Table/Relation)  描述Table与Table之...

4484
来自专栏机器学习原理

科学计算拓展排序 sort_index sort_values值计数value_countsgroupby分组apply聚合

前言:这里开始涉及到数据处理,例如给你几千行几千列的数据,对这些数据进行分类聚合 排序 sort_index sort_values 参数:asc...

3156
来自专栏极客慕白的成长之路

C++上机考试试题解析

1.5K3
来自专栏阿凯的Excel

巧妙解决二维表信息匹配问题

1452
来自专栏数说工作室

统计师的Python日记【第3天:Numpy你好】

本文是【统计师的Python日记】第3天的日记 回顾一下,第1天学习了Python的基本页面、操作,以及几种主要的容器类型;第2天学习了python的函数、循环...

45112
来自专栏绿巨人专栏

Modern Algebra 读书笔记

3555
来自专栏CDA数据分析师

用SPSS做数据分析?先弄懂SPSS的基础知识吧

1、SPSS数据分析的流程 ? 2、SPSS特性: ? 3、数据的编辑: 1 常量 数值型常量:除了普通写法外还可以用科学计数法,如:1.3E18; 字符型常量...

35510
来自专栏cs

Mathematica学习笔记

放假了,近来无事,就复习了一下mathematica相关知识点。已经玩了很多东西,不过大概还是很熟悉。 Mathematica(我简称mma),可以通过交互方...

5616

扫码关注云+社区

领取腾讯云代金券