32位整数反转int(十进制整数),注意保留符号。
划重点:
1. java中的int类型存储长度为32bit,即范围是:“-2^32” ~ “2^32 -1” 。注意取反转时可能存在越界,越界时返回0。
2. 尾数为0的数,反转后返回的数不计前面的0
![](https://img.haomeiwen.com/i6113795/bbc230aa0129ff8a.png)
思路:
- 反转整数:【模十法】通过对数字模十取余得到它的最低位
- 边界条件: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 || result<Integer.MIN_VALUE ){
result = 0;
break;
}
}
result = x>0?result:-result; //保留负号
return (int)result; //将long类型的result转换为int型并返回;
}
}
后续 Follow Up
Q:拿到反转整数题目后第一步是什么?
A:先问出题者尾部有0的数字反转后应该是什么形式,其次问清楚溢出时应该返回什么。
Q:除了检查溢出返回特定值以外,有没有别的方法处理溢出?
A:可以使用try-catch代码块排除异常。
网友评论