整数反转
题目描述
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例
- 示例1
- 示例2
- 示例3
输入:x = 123
输出:321
输入:x = -123
输出:-321
输入:x = 120
输出:21
解题思路
- 解法1
- 初始化一个变量
res为 0,用于存储反转后的整数。 - 通过循环将
x的最后一位添加到res中,并更新x的值。 - 检查
res是否超出 32 位有符号整数的范围。如果超出范围,则返回 0。 - 循环结束后,返回
res作为结果。
时间复杂度:O(log(x)) 空间复杂度:O(1)
C++ 解法
- 解法1
#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. 整数反转