凌云的博客

行胜于言

LeetCode 算法题 7. 整数反转

分类:algorithm| 发布时间:2016-06-27 23:47:00


题目

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例 1:

输入: 123
输出: 321

示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

注意:

假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231,  231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

解法

这道题相当简单,假设给出的数字是 x,返回值为 ret。

int ret = 0;
while (x) {
    ret = ret * 10 + x % 10;
    x /= 10;
}

需要注意 x 为负数的情况。以及当得到的结果溢出时要返回 0。

class Solution {
public:
    int reverse(int x) {
        bool negative = false;
        if (x < 0) {
            negative = true;
            x = -x;
        }

        long ret = 0;
        while (x) {
            ret = ret * 10 + (x % 10);
            x /= 10;
        }

        if (negative) {
            ret = - ret;
        }

        if (ret > INT_MAX || ret < INT_MIN) {
            return 0;
        }

        return ret;
    }
};

更近一步,其实不用判断是否为负数:

class Solution {
public:
    int reverse(int x) {
        long ret = 0;
        while (x) {
            ret = (ret * 10) + (x % 10);
            x /= 10;
        }

        if (ret < INT_MIN || ret > INT_MAX) {
            return 0;
        }

        return ret;
    }
};