LeetCode-7. 整数反转-Java实现

题目链接

结果

运行结果如下:
在这里插入图片描述
代码如下:

class Solution {
    public int reverse(int x) {
        boolean judge = x >=0;

        int now = 0;

        int max = Integer.MAX_VALUE / 10;
        int min = Integer.MIN_VALUE / 10;
        while (x != 0) {
            if (judge) {
                if (now > max) {
                    return 0;
                }
            } else {
                if (now < min) {
                    return 0;
                }
            }
            now = 10 * now + x % 10;
            x /= 10;

        }
        return now;
    }
}

思路

题目要求反转数字,本来很简单,就是通过不断取余,取余后会获取最后一位的数字,整体数字除以10,这样十位的数字降到个位,不断通过这样迭代,最终整个数字变为0表示逆序取完数字。取完一位数字就放到一个新的数字里面,之后再加新的数字进来时,先把老的数字×10,这样就可以不断增长,最终获得逆序数字。
但是题目要求只能存放32位,不能超过。这样就需要加一个判断,思路是这样的:如果一个数字逆序后比2^32(后面以max表示)大,那么它在倒数第二次迭代的时候肯定大于等于max/10,所以我只需每次提前判断是不是大于等于max/10,但是等于max/10也有可能等于或者小于max,所以要看取到的最后一位,如果我之前已经等于max/10了,如果最后一位大于7,那么就要溢出,所以要返回0.,如果小于等于,则照常返回。负数思路也一样,只是比较的为是否小于-8。我的代码有点省事,懒得改了,正好测试用例能够过,投个机~hhhh

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值