leetcode-7. Reverse Integer

7. Reverse Integer

Given a signed 32-bit integer x, return x with its digits reversed. If reversing x causes the value to go outside the signed 32-bit integer range [-231, 231 - 1], then return 0.

Assume the environment does not allow you to store 64-bit integers (signed or unsigned).

 

Example 1:

Input: x = 123
Output: 321

Example 2:

Input: x = -123
Output: -321

Example 3:

Input: x = 120
Output: 21

Example 4:

Input: x = 0
Output: 0

Constraints:

  • -231 <= x <= 231 - 1

 

解法: 此题的意思就是将给定的一个数进行反转,如果存在溢出情况就返回0。

将数字进行反转并不难,可以除10取余数进行操作,此问题的关键就是要判断溢出时的情况

因为输入的数字是int型,所以它的范围就是[INT_MIN,INT_MAX],即-2147483648~2147483647 之间。

那么res最大的情况就是214748364,因为x是一个整数,在可能溢出的情况下其开始的第一位是1或者2,

所以 res 只能是 2147483641 或 2147483642 都在 int 的范围内,但是它们对应的x为 1463847412 和 2463847412,

后者超出了数值范围。所以当过程中 res 等于 214748364 时, 输入的x只能为 1463847412, 翻转后的结果为 2147483641,都在正确的范围内。

class Solution {
public:
    int reverse(int x) {
        int res = 0;
        while (x != 0) {
            if (abs(res) > INT_MAX / 10) return 0;
            res = res * 10 + x % 10;
            x /= 10;
        }
        return res;
    }
};

还有另一种方法就是直接判断溢出是与INT_MAX或者INT_MIN进行比较,详细的解释可以查看leetcode

class Solution {
public:
    int reverse(int x) {
        int rev = 0;
        while (x != 0) {
            int pop = x % 10;
            x /= 10;
            if (rev > INT_MAX/10 || (rev == INT_MAX / 10 && pop > 7)) return 0;
            if (rev < INT_MIN/10 || (rev == INT_MIN / 10 && pop < -8)) return 0;
            rev = rev * 10 + pop;
        }
        return rev;
    }
};

 

上一篇:[Training Video - 1] [Introduction to Web services]


下一篇:R语言--方差分析2(双因素方差分析、多元方差分析、可视化)