整数反转——输入一个32位的有符号整数x,返回x中数字反转的结果

题目要求:

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

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

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

示例1:

        输入:x = 123

        输出:321

示例2:

        输入:x = -123

        输出:-321

示例3:

        输入:x = 120

        输出:21

示例4:

        输入:x = 0

        输出:0

 

思路分析:

        1、首先对输入的数字进行判断,如果输入的数字大于2^31-1或者小于-2^31,直接返回0;

        2、对数字的正负进行判断,如果输入为正数,则对数字按位进行除零,将数字按位处理后重新生成一个新的数字。

        3、将生成的新的数字重新加上正负号。

按照这种思路,代码如下:

public static int reverse(int x) {
    int num = 0;
    if (x > Math.pow(2, 31) - 1 || x < (-1) * Math.pow(2, 31)) {
        return 0;
    } else if (x > 0) {
        while (x % 10 != 0) {
            num *= 10;
            num += x % 10;
            x /= 10;
        }
        return num;
    } else {
        x *= -1;
        while (x % 10 != 0) {
            num *= 10;
            num += x % 10;
            x /= 10;
        }
        return -1 * num;
    }
}

 代码简化:

        上面的代码实行思路比较简单易懂,但是代码过于冗杂,不利于书写。那么java中有没有方法,调用后可以实现自动反转呢?

        StringBuffer / StringBuilder类中有reverse()方法可以实现此功能。那么我们这里调用StringBuilder中的方法进行尝试。

        1、StringBuilder传参时需要传入String类型的参数,所以我们这里需要将int类型的形参x转换为String类型。通过String.valueOf()方法,将int -> String。

        2、但是需要注意的是,原数据需要先取绝对值,否则调用reverse()方法的时候,“-”符号会连带着数字一起反转。

        3、通过sb对象调用StringBuilder的reverse()方法,此时返回的是一个StringBuilder对象。所以,需要将其装换成int类型我们想到了Integer包装类下的valueOf()方法。但是Integer.valueOf()需要的参数是String类型,所以我们还需要对sb.reverse()进行转换。可以调用String类下的valueOf()方法,同时也可以通过sb.reverse().toString()进行转换。

        4、判断输入数据是否过大,除了调用if方法进行判断,还可以通过try...catch语句块。当数据过大时,返回0的代码就放在catch语句块中。

public static int reverse(int x){
        try {
            StringBuilder sb = new StringBuilder(String.valueOf(Math.abs(x)));
            x = x>0 ? Integer.valueOf(String.valueOf(sb.reverse())) : -1*Integer.valueOf(String.valueOf(sb.reverse()));
        } catch (NumberFormatException e){
            e.printStackTrace();
            return 0;
        }
        return x;

    }

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值