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 广东

相关推荐

ProMonkey2024:5个oc?厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了(别的帖子偷来的,现学现卖😋)
点赞 评论 收藏
分享
2 1 评论
分享
牛客网
牛客企业服务