码迷,mamicode.com
首页 > 其他好文 > 详细

[leetcode]_String to Integer (atoi)

时间:2014-05-16 01:08:33      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   c   java   

非常考虑思维全面性的一道题,考验是否能够考虑本问题的方方面面。

题目:将一个string转换为int。实现函数atoi()的功能。

先应该明确atoi()有哪些特殊功能:(正常的正负数情况我就不列了)

input output
”+1“ 1
”   +   1“  0(error了)
”       1“ 1(前头只有空格是合法的)
”12b45“ 12(取前面的数字)
溢出 : ”2147483648“(负数情况同) 2147483647(MAX_VALUE)

 

类似我对atoi()的功能不熟的人来说,这道题就是不停WA的血泪史。每次要修正一次错误答案。

最终AC:

bubuko.com,布布扣
public int atoi(String str) {
        int len = str.length();
        long num = 0;
        //用long型存储,以处理溢出的情况
        int ifNegative = 1;
        boolean numStatus = false;
        for(int i = 0 ; i < len ; i++){
            char ch = str.charAt(i);
            if(numStatus && (ch < ‘0‘ || ch > ‘9‘)) break;
            else if(numStatus && ch >= ‘0‘ && ch <= ‘9‘){
                num = num * 10 + (ch - ‘0‘);
            }else if(!numStatus && ch != ‘-‘ && ch != ‘+‘ && (ch < ‘0‘ || ch > ‘9‘)){
                num = 0;
                break;
            }else if(!numStatus && ch == ‘-‘){
                numStatus = true;
                ifNegative = -1;
            }else if(!numStatus && ch == ‘+‘){
                numStatus = true;
            }else if(!numStatus && ch >= ‘0‘ && ch <= ‘9‘){
                numStatus = true;
                num = num * 10 + (ch - ‘0‘);
            }
            
        }
        num *= ifNegative;
        
        int result = 0;
        if(num > Integer.MAX_VALUE) result = Integer.MAX_VALUE;
        else if(num < Integer.MIN_VALUE) result = Integer.MIN_VALUE;
        else result = (int) num;
        
        return result;
        
    }
bubuko.com,布布扣

 

[leetcode]_String to Integer (atoi),布布扣,bubuko.com

[leetcode]_String to Integer (atoi)

标签:style   blog   class   code   c   java   

原文地址:http://www.cnblogs.com/glamourousGirl/p/3730164.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!