仅做学习笔记之用。
题目:
给你一个 32 位的有符号整数 x
,返回将 x
中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1]
,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
输入:x = 123 输出:321
示例 2:
输入:x = -123 输出:-321
示例 3:
输入:x = 120 输出:21
示例 4:
输入:x = 0 输出:0
提示:
-231 <= x <= 231 - 1
一开始想的挺复杂的,什么先记录符号然后取绝对值再new一个StringBuilder然后用reverse反转一下依次输入什么的。后面发现其实每次取余累加就好了。。。
代码如下:
class Solution {
public static int reverse(int x) {
int sign = (x < 0) ? -1 : 1;
x = Math.abs(x);
long result = 0;
while (x > 0) {
int num = x % 10;
x /= 10;
if (result > Integer.MAX_VALUE / 10 || (result == Integer.MAX_VALUE / 10 && num > 7)) {
return 0;
}
result = result * 10 + num;
}
return (int) (result * sign);
}
}
时间很快,但是空间的话还有很大的提升空间。
(算法大佬英雄哪里出来曾曰:过——啦)
解决。