Leetcode_7. 整数反转

【原题链接】

7. 整数反转

【题目描述】

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

示例 1:

输入: 123
输出: 321

** 示例 2:**

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

注意:

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

【代码】

class Solution {
public:
    int reverse(int x) {
        int r = 0, t;
        while(x){
            if((r > INT_MAX / 10)||(r < INT_MIN / 10))
                return 0;
            r = r * 10 + x % 10, x /= 10;
        }
        return r;
    }
};

执行用时: 8 ms

内存消耗: 6.3 MB

【时间复杂度】

O(logx)

【注意点】

  1. 其他解法:先转成字符串再倒序输出,大概是O(1)?但不建议使用

  2. 判断越界可以先存long long最后判断。

  3. 注意c++11之后,负数取模、取商是负数,所以不需要分类讨论。

评论