leetcode练习-简单-第七题-翻转整数

问题

输入一个int型的整数,对其进行前后翻转后输出,若翻转后的数字不是int则返回0
例如:输入123456,输出654321

解决方案

字符串翻转

解决思路

最简单的方法就是将这个数字转换成String字符串,再转换成char数组,倒序遍历数组转换成字符串以后再转化成int,问题解决。唯一的问题就是转换成int时可能会出现超出int的范围的异常,这里捕捉到异常,返回0就是了

代码实现

public int reverse(int x){
        if(x>0){
            return reverseNum(x);
        }else if (x==0){
            return 0;
        }else {
            x=0-x;
            return 0-reverseNum(x);
        }
    }

public int reverseNum(int x){
        char[] nums=String.valueOf(x).toCharArray();
        int length=nums.length;
        for(int i=0;i<length/2;i++){
            char temp=nums[i];
            nums[i]=nums[length-1-i];
            nums[length-1-i]=temp;
        }
        try{
            return Integer.valueOf(new String(nums));
        }catch (Exception e){
            e.printStackTrace();
            return 0;
        }
    }

不转换字符串

解决思路

题目的附加条件是不能将数字转换成int,那就只能对数字进行计算操作,将数字余除以10可以取到个位数,将数字除以10则可已得到去掉个位数剩下的数字,这样就可以用计算的方法将数字进行翻转
最后的问题就是解决翻转后超出int范围的问题,我们都知道int的最大值是2的31次方-1就是2147483647,只要越界前最后一次添加的数字大于7,就超出了int的取值范围

代码实现

public int reverse(int x){
        if(x>0){
            return reverseNum(x);
        }else if (x==0){
            return 0;
        }else {
            x=0-x;
            return 0-reverseNum(x);
        }
    }

public int reverseNum(int x){
        int rev = 0;
        while (x != 0) {
            int pop = x % 10;
            x /= 10;
            if (rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE / 10 && pop > 7)) return 0;
            rev = rev * 10 + pop;
        }
        return rev;
    }