title: 算法小练——整数反转
categories:
- Algorithms
tags: - esay
abbrlink: 1153862305
date: 2019-11-04 14:18:52
描述
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例
示例1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
### 代码
class Solution {
public int reverse(int x) {
int a=0,b=0;
while (x!=0){
b =x%10;
x/=10;
//越界的情况,比最大值大 a>2^31 或者a=2^31 但是首字母>7
if(a>Integer.MAX_VALUE/10 ||a==Integer.MAX_VALUE/10&&b>Integer.MAX_VALUE%10){
return 0;
}
//越界情况,比最小值小
if(a<Integer.MIN_VALUE/10 ||a==Integer.MIN_VALUE/10&&b<Integer.MIN_VALUE%10){
return 0;
}
a =a*10+b;
}
return a;
}
}
笔记
难点,处理越界。
如何会越界呢 a10+b>Integer.MAX_VALUE时,故可知 a一定 >Integer.MAX_VALUE /10 越界。
同样的, a*10+b<Integer.MIN_VALUE也越界,故可知a一定<Integer.MIN_VALUE/10.
再具体化区间,假如 a=Integer.MAX_VALUE/10呢 则 代替到上式
Integer.MAX_VALUE /10 *10+b >Integer.MAX_VALUE
Integer.MAX_VALUE/10 *10 +Integer.MAX_VALUE%10 =Integer>MAX_VALUE
负数的同理