LeetCode题解(JAVA)
LeetCode07——整数反转
题目描述
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
提示:以下是本篇文章正文内容,下面案例可供参考
思路
整数反转,就是将原先在末尾的数字,移动到首位;倒数第二位数移动至正数第二位……
若原整数为num1,反转后的整数为num2;
那么num2的首位数即是num1的末位数,num2的第二位数即是num1的倒数第二位数。
举个例子,整数45678,反转后应该是87654,则反转过程如图
再通过数学的角度说明:
所以,每一轮次计算整数的末位数:num % 10,接着num / 10,为下一轮做准备,循环直到num / 10 = = 0
最后,注意内存溢出的问题即可。
代码实现
class Solution {
public int reverse(int x) {
/**
溢出这么难判断的原因就是使用 int 去存反转后的结果,
如果溢出就会把溢出部分的数据位丢掉,导致结果不正确。
那我们用一个更长的数据类型(long)去存反转后的结果
最后直接把反转后的结果与 int 类型的上下限比较即可判断是否溢出。
*/
long t = x;
long res=0;
//求每一位,叠加
while(t != 0){
res = res * 10 + t % 10;
t = t / 10;
}
//判断是否溢出
if(res < Integer.MIN_VALUE || res > Integer.MAX_VALUE){
return 0;
}
return (int)res;
}
}