首页 > 其他 > 详细

String to Integer (atoi) leetcode

时间:2016-01-09 13:51:13      阅读:225      评论:0      收藏:0      [点我收藏+]

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.

 

这一类题目需要考虑所有输入情况,题目给出的条件非常模糊不清,需要我们猜测可能的特殊情况。所以,反复调试是不可避免的。

我首先考虑到了+、-号的情况,然后想到了非数字情况,比如空格和字母、特殊字符等等,空格可以忽略,字母和特殊字符需要终止,判为非法输入。

想出这些情况后,我没有急于编程,搜索了其他人的答案后,发现自己还漏掉了一种最容易忽略的情况——数字溢出

如果输入的值大于int的最大值2147483647该怎么处理?按照C语言的转换规则,高位被截去,只能保留低位数字,这里就不需要这么复杂了吧,只需要设置成最大值就行了。

如何是小于最小值呢?-2147483646,同样的道理,设置成最小值。

这里我还想到了一种情况,那就是有小数点,这里虽然题目没有要求,我还是加入了,实现参考的是C语言的强制转换规则,不是四舍五入。

实现好后,提交,发现居然还有"-+10"这种输入情况,如果有这种情况,那么"--+"、"-+-+++"这些复杂的输入都可以吧。事实上leetcode只提供了"-+"、"+="这两种情况,这样的设置真是非常坑爹,可以说是没有意义的。

int myAtoi(string str) {    
    int i = 0;    
    while (str[i] ==  )
        i++;
    int sign = 1;
    if (str[i] == - || str[i] == +) {
        sign = 1 - 2 * (str[i++] == -);
    }
    int sum = 0;    
    while (i < str.length() && isdigit(str[i]))
    {
        if (sum >  INT_MAX / 10 || (sum == INT_MAX / 10 && str[i] - 0 > 7)) {
            if (sign == 1) return INT_MAX;
            else return INT_MIN;
        }
        sum = 10 * sum + (str[i++] - 0);
    }
    if (i + 1 < str.length())
        if (str[i] == . && isdigit(str[i + 1]))
            sum += sign;
    return sum * sign;
}

 

后记:

做这样的题,就好像项目没有明确的需求方案,全靠程序员自己脑补需求一样。猿们现实工作的蛋疼之处可见一斑。

经验丰富的程序员,就是那种真正懂得客户需求的人吧,代码可以编的不多不少,恰到好处,真的需要经历太多历练才得达到这样的水平。

String to Integer (atoi) leetcode

原文:http://www.cnblogs.com/sdlwlxf/p/5116201.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!