结果
运行结果如下:
代码如下:
class Solution {
public int reverse(int x) {
boolean judge = x >=0;
int now = 0;
int max = Integer.MAX_VALUE / 10;
int min = Integer.MIN_VALUE / 10;
while (x != 0) {
if (judge) {
if (now > max) {
return 0;
}
} else {
if (now < min) {
return 0;
}
}
now = 10 * now + x % 10;
x /= 10;
}
return now;
}
}
思路
题目要求反转数字,本来很简单,就是通过不断取余,取余后会获取最后一位的数字,整体数字除以10,这样十位的数字降到个位,不断通过这样迭代,最终整个数字变为0表示逆序取完数字。取完一位数字就放到一个新的数字里面,之后再加新的数字进来时,先把老的数字×10,这样就可以不断增长,最终获得逆序数字。
但是题目要求只能存放32位,不能超过。这样就需要加一个判断,思路是这样的:如果一个数字逆序后比2^32(后面以max表示)大,那么它在倒数第二次迭代的时候肯定大于等于max/10,所以我只需每次提前判断是不是大于等于max/10,但是等于max/10也有可能等于或者小于max,所以要看取到的最后一位,如果我之前已经等于max/10了,如果最后一位大于7,那么就要溢出,所以要返回0.,如果小于等于,则照常返回。负数思路也一样,只是比较的为是否小于-8。我的代码有点省事,懒得改了,正好测试用例能够过,投个机~hhhh