前言说明
   
算法学习,日常刷题记录。
    
    
    题目连接
   
    
    
    题目内容
   
给你一个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%的用户。
     
   
    
    
    原文链接
   
    原文链接:
    
     整数反转
    
   
 
版权声明:本文为JienuhC原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
