题目描述
Reverse digits of an integer.
Note: The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.
输入与输出
class Solution {
public:
int reverse(int x) {
}
};
样例
Example1: x = 123
, return 321
.
Example2: x = -123
, return -321
.
题解与分析
新建一个整型变量,翻转即可。为了防止溢出,可以使用 long long 型变量。
C++ 代码如下:
class Solution {
public:
int reverse(int x) {
if (x == 0)
return 0;
long long y = 0;
while (x != 0)
y = y * 10 + x % 10, x = x / 10;
if (y > INT_MAX || y < INT_MIN)
return 0;
return y;
}
};
该算法的时间复杂度为 O(logn)(10进制表示的长度)。
如果不使用 long long 型变量,可以通过检测每次 y = y * 10 + x % 10
操作后,比较y
除 10 的余数与上一次的y
值,如果不同,发生溢出。经过测试,与上述方法在运行时间上没有明显差别。