LeetCode刷题-整数反转

前言说明

算法学习,日常刷题记录。

题目连接

整数反转

题目内容

给你一个32位的有符号整数x,返回将x中的数字部分反转后的结果。

如果反转后整数超过32位的有符号整数的范围 [−2^31,  2^31 − 1] ,就返回0。

假设环境不允许存储64位整数(有符号或无符号)。

示例1:

输入:x = 123

输出:321

示例2:

输入:x = -123

输出:-321

示例3:

输入:x = 120

输出:21

示例4:

输入:x = 0

输出:0

提示:

-2^31 <= x <= 2^31 - 1

分析过程

定义sum为反转后的整数,初始值为0,每一次得到的余数都加上sum乘以10,最后就会得到反转后的整数。

我们举例是123。

那么第一次得到3,0*10+3=3。

第二次得到2,3*10+2=32。

第三次得到1,32*10+1=321。

刚好就是123反转过来的321。

解答代码

所以解答代码如下:

class Solution {
    public int reverse(int x) {
        int n = x;

        if (x < 0) {
            // 若是负数,乘以-1
            x = x * -1;
        }

        // 保存反转的整数
        int sum = 0;

        // 循环判断除以10是否为0,不断取x的最后位的数字
        while (x > 0) {
            // 通过取余,获得x最后位的数字
            int m = x % 10;

            // 反转整数暂时保存起来
            int temp = sum;

            // 乘以10加上余数,每次乘以10,每次都会扩大10倍,最后得到结果减去最末位,但是这里最后又加上了最末位m,因为x不断除以10得到的是反过来的数字,所以这里刚好就得到反转后的整数
            sum = sum * 10 + m;

            if (sum / 10 != temp) {
                // 通过和之前一个对比,可以判断是否溢出
                return 0;
            }

            // x除以10减去最右边的位
            x = x / 10;
        }

        if (n < 0) {
            // 若是负数,再乘回-1
            sum = sum * -1;
        }

        return sum;
    }
}

提交结果

执行用时1ms,时间击败100.00%的用户,内存消耗35.4MB,空间击败75.77%的用户。

运行结果

原文链接

原文链接:整数反转

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值