今天在刷LeetCode遇到的趣事,之前一直还没注意过
力扣第7题:
对于数据溢出返回0 首先想到的就是用try catch捕获异常直接返回0
class Solution07 {
// x=120 021 x=321 123
public int reverse(int x) {
int res = 0;
try{
while (x!=0){
res = (res * 10) + (x % 10);
x = x/10;
}
}catch(Exception e){
return 0;
}
return res;
}
}
但发现这里int类型的数据溢出错误不会被捕获,而会自己补值返回
因此对于这种可能数据溢出的问题需要用精度更高的值来接收 然后和低精度值的最大最小值来进行判断 即小于int类型的最小值 大于int类型的最大值时 返回0
class Solution07 {
// x=120 021 x=321 123
public int reverse(int x) {
long res = 0;
while (x!=0){
res = (res * 10) + (x % 10);
x = x/10;
if(res>Integer.MAX_VALUE || res<Integer.MIN_VALUE){
return 0;
}
}
return (int)res;
}
}