7 整数反转 (数学)

题目

7. 整数反转

难度简单

给你一个 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

 

提示:

  • -231 <= x <= 231 - 1

解法一

将整数转化成字符串,再反转,注意一下对应的负号的处理 和 反转后越界的抛出异常,即可。经过测试,使用StringBuffer比字符数组遍历一个一个字符反转快一些  但是整个算法来讲,还是很慢。

class Solution {
      public static int reverse(int x) {
        int res = 0;

        String temp = String.valueOf(x);

        StringBuffer sBuff = new StringBuffer(temp);   //String转换为StringBuffer

//        String s1 =sBuff.toString();
        if (sBuff.charAt(0)=='-')
        {
            sBuff.deleteCharAt(0);
            sBuff = sBuff.reverse();
           try {
               res=Integer.parseInt('-'+sBuff.toString());
           } catch (NumberFormatException e) {
               return 0;
           }

        }
        else
        {
            sBuff = sBuff.reverse();
             try {
                 res = Integer.parseInt(sBuff.toString());
             } catch (NumberFormatException e) {
                 return 0;
             }


        }

//       if(res>Math.pow(2,31)-1||res<-Math.pow(2,31)){
  //         return 0;
    //   }

        return res;

    }


}

Tips:

1.StringBuffer sBuff = new StringBuffer(temp); //String转换为StringBuffer

2.String temp = String.valueOf(x);//int转换成String

3.String s1 =sBuff.toString();//StringBuffer转化成String

4.res = Integer.parseInt(sBuff.toString());//String转化成int(最好用这个 而不用valueof).

5.Math.pow(2,31)// 2的31次方

 

解法二:

入栈出栈的思想     x取余是取最后一位数 作为ans的第一位, 然后ans每次都乘10 再加上x的余数,x每次都/10    判断溢出时候,因为溢出了之后就不能存储这个数,更不能比较大小,所以在乘10之前和最大值值/10 进行比较,如果比它大 那就溢出了,如果和他相同,再比较最后一位数。

有一个更加方便的方法

 if(res*10/10!=res) {
//                return 0;
//            }

乘10 溢出了,但是不会报错,而是换成long形式存起来,用的时候再取为int型,所以读取的时候肯定不是真正的*10的结果。

 public static int reverse(int x) {


        int res = 0;
        while(x!=0){
            int pop = x%10;

//            if(res*10/10!=res) {
//                return 0;
//            }
            if(res>Integer.MAX_VALUE/10||(res==Integer.MAX_VALUE/10 && pop>Integer.MAX_VALUE%10)){
                return 0;
            }
            if(res<Integer.MIN_VALUE/10||(res==Integer.MIN_VALUE/10 && pop<Integer.MIN_VALUE%10)){
                return 0;
            }
            res=res*10+pop;
            x=x/10;

        }




        return res;


    }

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值