给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
逆向输出,也就是整除后在除一下,一个循环就做完了,如果就这样那就上当了,我就是没看完题目,还有一个注意,反转之后数字可能超模,超模后为0,这就涉及到了边界的判断,代码如下:
class Solution {
public int reverse(int x) {
int rs = 0;
while(x != 0){
if(rs > Integer.MAX_VALUE /10 || rs < Integer.MIN_VALUE /10) return 0;
rs *= 10;
if((rs == Integer.MAX_VALUE / 10 && x % 10 >Integer.MAX_VALUE % 10 ) || (rs == Integer.MIN_VALUE / 10 && x % 10 <Integer.MIN_VALUE % 10)) return 0;
rs += x % 10;
x /= 10;
}
return rs;
}
}
只要在rs大于max /10 时return 0 和 rs = max/10 && x%10 > max%10时return 0 边界问题就解决了。
但是提交完成后我的运行速度倒是快的,但是内存消耗才5%我就去看了看最小的,他采用的是不用int型,用long型的只要大于或小于int的max或min就return 0;感觉也挺对的,至于官方的代码和我是一样的没什么区别。