P162 反转整数
算法 17 阅读
信号摘要
难度:Easy · 时长:10:13 · leetcode 7 · lintcode 413
未对外公开播放权限
点击查看说明
描述
这个题目说的是,给你一个 32 位的整数,你要反转它每一个十进制位上的数字。对于负数,我们只反转数字部分,负号仍然放在最前面。另外,反转后如果有前缀 0,则要去掉。
注意,反转后的数字如果溢出,无法使用一个 32 位的整数表示,则返回 0。
比如说,给你的整数是 124,反转后的结果为 421:x = 124, reverse(x) => 421
再比如说,给你的整数是 -42,反转后的结果为 -24
x = -42, reverse(x) => -24
负号不需要反转,仍然放在最前面。最后,如果给你的整数是 420,返回后的结果为 24:
x = 420, reverse(x) => 24
反转后要去掉前缀 0,只剩下 24。
代码
public class AlgoCasts {
// Time: O(k), Space: O(1)
public int reverseWithLong(int x) {
int max = Integer.MAX_VALUE;
int min = Integer.MIN_VALUE;
long y = 0;
while (x != 0) {
y = y * 10 + x % 10;
x /= 10;
if (y > max || y < min) return 0;
}
return (int) y;
}
// Time: O(k), Space: O(1)
public int reverseWithoutLong(int x) {
int max = Integer.MAX_VALUE / 10;
int min = Integer.MIN_VALUE / 10;
int y = 0;
while (x != 0) {
if (y > max || y < min) return 0;
y = y * 10 + x % 10;
x /= 10;
}
return y;
}
}