每日一题 {#%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98}
整数反转 {#%E6%95%B4%E6%95%B0%E5%8F%8D%E8%BD%AC}
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号),也就是不能说定义long类型。
示例 1:
输入:x = 123
输出:321
示例 2:
输入:x = -123
输出:-321
示例 3:
输入:x = 120
输出:21
示例 4:
输入:x = 0
输出:0
提示:
-231 <= x <= 231 - 1
题解 {#%E9%A2%98%E8%A7%A3}
public int reverse(int x) {
// 最终返回的值
int num = 0;
// 一直循环直至最后一位 123 -》12 -》1 -》0
while (x != 0) {
// 取末位的数字
int i = x % 10;
// 每次循环去掉末位数字
x = x / 10;
// 因为不允许存储long类型,所以无法直接和Integer.MAX/MIN_VALUE直接进行比较
// 这就相当于是 (最终返回的反转数值/10)和(Integer.MAX_VALUE/10)进行相比较,因为能进到循环里说明后面还有数字,
// 所以只要当num > 214748364了,无论后面的数字为什么都会大于Integer.MAX_VALUE,亦或当num == 214748364时只要后面的数字大于7
if (num > 214748364 || (num == 214748364 && i > 7) ) return 0;
if (num < -214748364 || (num == -214748364 && i < -8) ) return 0;
num = num * 10 + i;
}
return num;
}