Leetcode整数反转
-
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例一
输入: 123 输出: 321
示例二
输入: -123 输出: -321
示例三
输入: 120 输出: 21
注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
int reverse(int x){ int rev = 0; while(x != 0){ int pop = x % 10; if(rev > (pow(2, 31) - 1) / 10 || (rev == (pow(2, 31) - 1) / 10 && pop > 7)) return 0; if(rev < -1 * pow(2, 31) / 10 || (rev == -1 * pow(2, 31) / 10 && pop < -8)) return 0; x = x / 10; rev = rev * 10 + pop; } return rev; }
这里主要考虑的是溢出条件:
设当前计算结果为rev,下一位为pop,最大值和最小值分别为max和min
- rev * 10 + pop > max溢出时,有两种情况:一是出现rev > max / 10,此时无论pop是多少(这里的pop是正数),都会溢出;二是rev == max / 10 且pop > 7时,这里的7是2^31 - 1的个位数,也就是说,个位数最多是7。
- rev * 10 + pop <min溢出时,也有两种情况:一是rev < min / 10,此时无论pop是多少(这里的pop是负数),都会溢出;二是rev == min / 10且pop < -8时,这里的8是2^31的个位数,也就是说,个位数最多是-8。

浙公网安备 33010602011771号