整数反转

LeetCode题目,7. Reverse Integer

先看题目描述

大意就是给定一个有符号整数,让我们实现将其反转,若翻转后溢出,则返回 0

算法和思路

思路就是一直弹出 x 的最后一位数字,并将它推入到 ans 的后面,最后 ans 将与 x 相反,返回 ans 即可,过程如下

  • ans = ans * 10 + x % 10
  • x = x / 10

还有要注意的就是溢出的问题,看题解时发现了一个很巧妙的方法,若 ans * 10 + x % 10 后未溢出,ans 将与 ans * 10 / 10 相等;若 ans * 10 + x % 10 后溢出,则 ans 与 ans * 10 / 10 不相等,直接返回 0 即可

算法源码

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
public int reverse(int x) {
int ans = 0;
while(x != 0) {
if (ans != ans * 10 / 10) {
return 0;
}
ans = ans * 10 + x % 10;
x /= 10;
}
return ans;
}
}

注意:在 Java 中,-123 % 10 = -3,Math.floorMod(-123, 10) 才等于 7