leetcode(7-整数翻转-java)

题目描述:
在这里插入图片描述

题目本身不难,但是中间有几个点是比较值得注意的。

最一开始的思路是,先求出该整数的长度, 然后循环对10取模,然后整除10,然后求出来的每一位数,都乘上对应的几个10;

原始代码如下:

class Solution {
    public int reverse(int x) {
        if (x == 0) {
            return 0;
        }
        else {
            int y = x;
            int len = 1;  //记录整数的长度
            while (y / 10 != 0) {
                y /= 10;
                len++;
            }
            int t = 0;  //存储求余得到的个位数
            int fanzhuan_result = 0;
            for (int i = 0; i < len; i++) {
                t = x % 10;
                fanzhuan_result = (fanzhuan_result + t) * 10;
                x /= 10;
            }
            return fanzhuan_result / 10;
        }
    }
}

在这里插入图片描述

存在问题:

按照这种思路,如果翻转得到的结果没有溢出,那就是正常的,但是如果翻转后溢出了,那就是不可取的了。

没有考虑到的点:

①记录整数长度这里,可以用while循环,判断条件是 x != 0,这样边计算边判断 x 是否已经被整除完毕,就可以省去求整数长度这段多余的代码。

没有考虑到数据溢出的问题,例如:当 x = 1534236469,int的最大上限也就是 2147483647, 输入的 x 没有问题,但是翻转过后,因为原来个位数是9,所以翻转后,数值就变成了 90 多亿,已经溢出了

解决思路

可以将 fanzhuan_result的类型改为 long 类型,这样它的长度就能比int的长度还要长一些;就保证了数据不会溢出的问题;

但是这样得到的结果 fanzhuan_result 是 long 类型的,题目中要求的是返回一个翻转后的整数,所以最后还需要强制类型转换成 int 类型;

这样在计算得到 long 类型的 fanzhuan_result 之后,可以用 if 语句判断如果把 fanzhuan_result 强转为 int 类型之后,它的结果跟 long 类型的结果是一致的,就说明翻转后的数据没有溢出,如果强转后的结果与 long 类型的结果不一致,那就说明数据溢出了,直接返回 0 即可;

改进后的代码如下:

class Solution {
    public int reverse(int x) {
        if (x == 0) {
            return 0;
        } 
        else {
            int y = x;
            long fanzhuan_result = 0;
            int t = 0;
            while (x != 0) {
                t = x % 10;
                fanzhuan_result = fanzhuan_result * 10 + t;
                x = x / 10;
            }
           // System.out.println(fanzhuan_result);
            if ((int) (fanzhuan_result) == fanzhuan_result) {
                return (int)fanzhuan_result;
            } 
            else {
                return 0;
            }
        }

    }
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值