跳到主要内容

整数反转

题目描述

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。

示例

  输入:x = 123
输出:321

解题思路

  1. 初始化一个变量 res 为 0,用于存储反转后的整数。
  2. 通过循环将 x 的最后一位添加到 res 中,并更新 x 的值。
  3. 检查 res 是否超出 32 位有符号整数的范围。如果超出范围,则返回 0。
  4. 循环结束后,返回 res 作为结果。

时间复杂度:O(log(x)) 空间复杂度:O(1)

C++ 解法

#define INT_MAX 2147483647
#define INT_MIN -2147483648

class Solution {
public:
int reverse(int x)
{
long long res = 0;
if (x == 0) return 0;

while (x != 0) {
int digit = x % 10;
res = res * 10 + digit;
x /= 10;
}
if (res > INT_MAX || res < INT_MIN) return 0;
return static_cast<int>(res);
}
};

LeetCode链接: 7. 整数反转