力扣算法题---整数反转

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 难度简单


注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

这道题挺简单的,当然不考虑内存,你可以使用栈辅助解决。
两个辅助变量,pop 缓存 x 弹出的个位数。rev 保存反转结果或反转过程值。
如果不使用栈时,运用数学思想,因为是整数。利用取余运算 pop = x % 10 。
利用除法运算,对x进行降级,从高位降到低位止。 x = x /10。
这两运算不断循环执行,直到 x 的位数为个位为止。

在每次执行时,将pop 加到 rev 的末尾,rev = rev * 10 + pop;但是会有溢出的风险。
所以在rev = rev * 10 + pop;执行前,需要对此进行判决,是否溢出。
if(rev > max || (rev == max && pop > 7)) return 0; //正整数溢出
if(rev < min || (rev == min && pop < -8)) return 0; //负整数溢出
第一个表达式判断当前的rev是否溢出,第二个表达式,判断pop加到rev末尾后是否会溢出。
	public int reverse(int x){
        int pop = 0;
        int rev = 0;
        int max = Integer.MAX_VALUE/10;
        int min = Integer.MIN_VALUE/10;
        while(x != 0){
            pop = x % 10;
            x = x / 10;

            if(rev > max || (rev == max && pop > 7)) return 0;
            if(rev < min || (rev == min && pop < -8)) return 0;
            rev = rev * 10 + pop;
        }
        return rev;
    }

出处:力扣,点击可以前往查看。

你可能感兴趣的:(数据结构和算法)