NC100 将字符串转化为整数-简单思路

将字符串转化为整数

http://www.nowcoder.com/questionTerminal/44d8c152c38f43a1b10e168018dcc13f

这个题目有点毒啊,开始我以为是将所有非数字,非正负符号的其它符号都去掉,剩下的组成一个数字,溢出返回0。后来发现,
1、首先是将空格去掉
2、其次判断第一个符号是正负号,还是数字,还是其它的东西,是其它东西返回0,否则继续向后
3、向后遍历,遇到其它符号就停止,仅仅使用之前遍历的数字,之后就算还有数字也不管了
4、判断是否溢出,若溢出,将边界值返回,就是将int范围返回。

这些条件是慢慢试出来的,所以代码并不是一上来就按这个思路写的,仅供参考

    public int atoi (String str) {
        // write code here
        if (str.isEmpty()){
            return 0;
        }
        str = str.replaceAll(" ", "");    //去掉所有空格
        //System.out.println("str:" + str);
        char first = '0';
        char last = '9';
        int count = 0;
        int negative = 0;   //判断有无负号
        int positive = 0;   //判断有无正数
        int[] ans = new int[100];
        double val = 0;
        for (int i = 0; i < str.length(); i++){
            char temp = str.charAt(i);
            if (temp >= first && temp <= last){
                ans[count] = temp - '0';
                count++;
            }else if (count == 0 && (temp == '+' || temp == '-')){
                if (temp == '+'){
                    positive = 1;
                }else if (temp == '-'){
                    negative = 1;
                }
            }else{
                break;
            }
        }
        //System.out.println("count:" + count);
        for (int i = 0; i < count; i++){
            double tmp = 1;
            for (int j = count - 1 - i; j > 0; j--){
                tmp = tmp * 10;
            }
            val = ans[i] * tmp + val;
        }
        if (negative == 1){
            val = -val;
        }
        if (val >= Integer.MAX_VALUE){
            //System.out.println("chn");
            return Integer.MAX_VALUE;
        }
        if (val <= Integer.MIN_VALUE ){
            return Integer.MIN_VALUE;
        }
        return (int)val;
    }
全部评论
题目下线,后来人如盲人摸象;好在你讲得挺清楚,感谢
点赞 回复 分享
发布于 08-29 16:51 广东

相关推荐

2 1 评论
分享
牛客网
牛客企业服务