给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123 输出: 321
示例 2:
输入: -123 输出: -321
示例 3:
输入: 120 输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [?231, 231 ? 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
官方题解的思路是逐位取出,判断是否满足溢出的条件,并列举了可能出现的俩种情况,遇到直接返回0 。总得来说还是考察对数字的敏感。
代码如下:
class Solution { public int reverse(int x) { int ans=0; while(x!=0) { int tmp=x%10; x/=10; if (ans > Integer.MAX_VALUE/10 || (ans == Integer.MAX_VALUE / 10 && tmp > 7)) return 0; if (ans < Integer.MIN_VALUE/10 || (ans == Integer.MIN_VALUE / 10 && tmp < -8)) return 0; ans=ans*10+tmp; } return ans; } }
个人的思路是将满足10位数的数字逐位比较MAX_VALUE或者MIN_VALUE对应位置,如果不满足直接返回0 。但是这里负数的没写好,所以就不放出来了。
看了大佬的操作,大佬直接判断反转后的数字再反转回去是否和原来对应,如果不对应,说明出现了溢出,返回0,如果对应,说明没溢出是正常的,继续操作。可以说是非常神仙的做法了。
代码如下:
class Solution { //反转后再反转看是否溢出 public int reverse(int x) { int res = 0; while (x != 0){ int tail = x % 10; int tmp = res * 10 + tail; if((tmp - tail) / 10 != res)return 0; res = tmp; x = x / 10; } return res; } }
原文地址:https://www.cnblogs.com/axiangcoding/p/10393557.html
时间: 2024-10-03 07:32:35