7. Reverse Integer
7.1 题目描述:
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
Note:
The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.
7.2 解题思路:
思路一:翻转整数,那就在x%10后赋给新的值sum,每次遍历前新的值先乘以10,再加上取余后的数。每次遍历后x都除以10,如果这个sum比int型最大还要大,或者比最小的还要小,则返回0。否则遍历结束后,返回sum即可。
思路二:分为c++和Python。
- c++:利用int型,当sum超出int型范围时,tsum与sum本来是10倍关系,这时不相等,返回0。遍历结束返回sum。
- Python:利用字符串直接reverse。先将int转换为字符串,直接[::-1]翻转。当然如果是负数,在转回int时乘以-1。最后判断是否超出边界条件即可。
7.3 C++代码:
1、思路一代码(12ms):
class Solution134 {
public:
int reverse(int x) {
if (x == 0)
return 0;
long long sum = 0;
while (x)
{
sum = sum * 10 + x % 10;
x = x / 10;
if (sum > INT_MAX || sum < INT_MIN)
return 0;
}
return int(sum);
}
};
2、思路二代码(26ms)
class Solution134_1 {
public:
int reverse(int x) {
int sum = 0;
while (x)
{
int tsum = sum * 10 + x % 10;
x = x / 10;
if (tsum/10 != sum)
return 0;
sum = tsum;
}
return sum;
}
};
7.4 Python代码:
1、思路一代码(49ms)
class Solution(object):#failed
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
ssum=0
flag=0
x_max=2**31-1
x_min=-2**31
if x>0:
flag=1
else:
x=0-x
flag=0
while x>0:
ssum=int(ssum*10+x%10)
x=x/10
if ssum>x_max or ssum<x_min:
return 0
if flag==1:
return ssum
else:
return 0-ssum
2、思路二代码(48ms)
class Solution1(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
x_max=2**31-1
x_min=-2**31
if x<0:
x=-1*int(str(0-x)[::-1])
else:
x=int(str(x)[::-1])
if x > x_max or x < x_min :
return 0
return x
本文详细解析了整数反转算法的两种实现方式:一种通过数学运算实现,适用于C++;另一种利用Python的字符串特性实现。文章提供了具体代码示例,并讨论了如何处理32位整数的溢出问题。
2220

被折叠的 条评论
为什么被折叠?



