常见面试算法题:反转整数

题目:给定一个 32 位有符号整数,将整数中的数字进行反转。

示例 1:

输入: 123
输出: 321

示例 2:

输入: -123
输出: -321

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

编码思路:按照输入整数的位数,对整数进行遍历,每次训练获取最后面的尾数,将其挪到最前面,并得到一个新的整数。

出现的错误:

  • 当输入的数字为负数时,反转的整数末位会多出一个0,解决办法:对正负整数进行区分,对负数去除符号位得到其位数。
    public static int reverse(int x) {
        long a = 0;
        int b =0;
        if(x>=0){
            b=(x+"").length();//正数
            }
        else{
            b=(x+"").length()-1;//负数多了一个符号位
            }
        while (x!=0){
            for(int i=0;i<b;i++){
                int a1 = x%10;//当前最后一位数字
                x=(x-a1)/10;//把最后一位数字剔除掉的新数字
                a += (int) (a1*Math.pow(10,b-i-1));
            }
        }
        if((a>Math.pow(2,31)-1)||(a<(-1)*Math.pow(2,31))){
            return 0;
        }
        return (int) a;
    }

猜你喜欢

转载自blog.csdn.net/qq_31279347/article/details/82531888
今日推荐