力扣算法 7. 整数反转

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

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

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

在这里插入图片描述
在这里插入图片描述
记rev是翻转之后的数字,为了完成翻转,我们可以重复弹出x末尾的数字,将其推入rev的末尾,直到x是0

要在没有辅助栈或者数组的帮助下弹出或者推入数字,我们可以使用以下的数学方法:
在这里插入图片描述
题目需要判断推入数字是否溢出,要在推入数字之前判断,如果溢出那么不等式不成立返回0

但是题目要求不允许使用64位整数,也就是运算过程中的数字必须在32位有符号整数的范围内,因此我们不能直接按照上面式子进行计算,需要找其他方式。

在这里插入图片描述在这里插入图片描述在这里插入图片描述
C++

class Solution {
    
    
public:
    int reverse(int x) {
    
    
        int rev =0;//新建一个翻转之后的变量rev
        while(x!=0){
    
    
            if(rev<INT_MIN/10||rev >INT_MAX/10){
    
    //满足上述不等式
                return 0;
            }
            int digit =x%10; //取最后一个数
            x/=10;//更新x的值
            rev=rev*10+digit;//推入翻转之后的变量rev
        }
        return rev;
    }
};

猜你喜欢

转载自blog.csdn.net/zhangyuanbonj/article/details/129957689