【转载 leetcode算法-整数反转】

2020-02-24 09:49:10 浏览数 (1)

方法:弹出和推入数字 & 溢出前进行检查

思路

我们可以一次构建反转整数的一位数字。在这样做的时候,我们可以预先检查向原整数附加另一位数字是否会导致溢出。

算法

反转整数的方法可以与反转字符串进行类比。

我们想重复“弹出” xx 的最后一位数字,并将它“推入”到 text{rev}rev 的后面。最后,text{rev}rev 将与 xx 相反。

要在没有辅助堆栈 / 数组的帮助下 “弹出” 和 “推入” 数字,我们可以使用数学方法。

代码语言:javascript复制
//pop operation:
pop = x % 10;
x /= 10;

//push operation:
temp = rev * 10   pop;
rev = temp;

代码:

代码语言:javascript复制
public class Zhengshufanzhuan {

    //官方解法
    static int reverse(int x){
        int rev = 0;


        System.out.println("int 的最大数:"   Integer.MAX_VALUE);
        System.out.println("int 的最小数:"   Integer.MIN_VALUE);
        while( x != 0){

            int pop = x % 10;

            x  /= 10;

            if(rev > Integer.MAX_VALUE / 10 || (rev == Integer.MAX_VALUE / 10 && pop > Integer.MAX_VALUE % 10)){
                rev = 0;
                break;
            }else if(rev < Integer.MIN_VALUE / 10 || (rev == Integer.MIN_VALUE / 10 && x < Integer.MIN_VALUE % 10)){
                rev = 0;
                break;
            }
            rev = rev * 10   pop;

        }
        return  rev;
    }
    //强人解法
    static int reverse2(int x) {
        int ans = 0;
        while (x != 0) {
            if ((ans * 10) / 10 != ans) {
                ans = 0;
                break;
            }
            ans = ans * 10   x % 10;
            x /= 10;
        }
        return ans;
    }
    public static void main(String[] args){
        //System.out.println(Zhengshufanzhuan.reverse(12345678));
        System.out.println(Zhengshufanzhuan.reverse2(12345678));
    }
}

0 人点赞