7. Reverse Integer

32位整数反转int(十进制整数),注意保留符号。

划重点:

1. java中的int类型存储长度为32bit,即范围是:“-2^32” ~ “2^32 -1” 。注意取反转时可能存在越界,越界时返回0。
2. 尾数为0的数,反转后返回的数不计前面的0

7. Reverse Integer_第1张图片
题目

思路:
  • 反转整数:【模十法】通过对数字模十取余得到它的最低位
  • 边界条件:Integer.MAX_VALUE(整形最大值)、Integer.MIN_VALUE(整形最小值)
  • 检查溢出: 方法1:两个正数数相加得到负数,或者两个负数相加得到正数,但某些编译器溢出或优化的方式不一样;方法2:对于正数,如果最大整数减去一个数小于另一个数,或者对于负数,最小整数减去一个数大于另一个数,则溢出--这是用减法来避免加法的溢出。方法3:使用long来保存可能溢出的结果,再与最大/最小整数相比较
  • 溢出处理: 返回0;
tips:
  • Math.abs(x);取绝对值,在这个题中,需要保留负号,那么考虑先将负数取绝对值反转后,再加上负号。
  • 将long型转换为int型:long x ;int a ; a=(int)x;

int,long,Integer,Long四种类型之间的相互转化:
一.将long型转化为int型,这里的long型是基础类型:
long a = 10; int b = (int)a;
二.将Long型转换为int 型的,这里的Long型是包装类型:
Long a = 10; int b=a.intValue();
三.将int型转化为long型,这里的int型是基础类型:
int a = 10;long b = (int)a;
四.将Integer型转化为long型,这里的Integer型是包装类型:
int a = 10;Long b = a.longValue();

代码:
class Solution {
    public int reverse(int x) {
        long result = 0;  //将结果存储为long型,初始化
        int tmp = Math.abs(x); //取整数的绝对值,将负数先作正数处理
        while(tmp>0){
            result *= 10;
            result += tmp%10;  //模十取余
            tmp /=10;
            //下面对是否越界进行判断,如果越界,返回0
            if(result >Integer.MAX_VALUE || result0?result:-result; //保留负号
        return (int)result;  //将long类型的result转换为int型并返回;
    }
}
后续 Follow Up

Q:拿到反转整数题目后第一步是什么?
A:先问出题者尾部有0的数字反转后应该是什么形式,其次问清楚溢出时应该返回什么。

Q:除了检查溢出返回特定值以外,有没有别的方法处理溢出?
A:可以使用try-catch代码块排除异常。

你可能感兴趣的:(7. Reverse Integer)