- 题目描述:
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
- 示例:
(1).
输入:123
输出:321
(2).
输入:-123
输出:-321
(3).
输入:120
输出:21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
- 解法一:利用字符串反转来实现
#Python
#两种实现方法相同,方式不同
def reverse1(x):
if -2**31 <= x <= 2**31:
s = str(x)
if s[0] != "-":
l = ""
for i in range(len(s)-1, -1, -1):
l = l + s[i]
else:
l = "-"
for i in range(len(s)-1, 0, -1):
l = l + s[i]
if -2**31 <= (int(l)) <= 2**31-1:
return int(l)
else:
return 0
def reverse2(x):
if -2**31 <= x <= 2**31:
s = str(x).replace("-", "")
number = int(s[::-1])
if number < 2**31:
if x > 0:
return number
else:
return -number
else:
return 0
else:
return 0
//Java
- 解法二:数学方法,采用一个while循环,不断提取x的取余数(%)和地板除数(//),终止条件为x不等于0.
#Python
def reverse(x):
if -2**31 <= x <= 2**31-1:
v = abs(x)
num = 0
if v > 9: #当x值为个位数时,不判断则直接返回0
while v != 0:
a = v % 10
num = num *10 + a
v = v // 10
if v < 10:
num = num * 10 + v
break
else:
return x
if num <= 2**31:
if x >= 0:
return num
else:
return -num
else:
return 0
else:
return 0
#上面代码不够简练,清晰度不高
class Solution(object):
def reverse(self, x):
rev=0
max=1<<31 if x<0 else (1<<31)-1
absx=abs(x)
while absx!=0:
pop=absx%10
absx=absx//10
if rev>(max//10) or (rev==max//10 and pop>max%10):
return 0
rev=rev*10+pop
return (rev if x>0 else -rev)
'''
代码原链接:https://leetcode-cn.com/problems/reverse-integer/solution/zheng-shu-fan-zhuan-an-guan-fang-si-lu-shi-xian-de/
'''
//Java
class Solution {
public int reverse(int x) {
int res = 0;
while(x != 0){
int t = x%10;
int newRes = res*10 + t;
//判断是否溢出,当整型溢出转换为浮点型时数值会发生变化
if((newRes - t)/10 != res){
return 0;
}
res = newRes;
x = x/10;
}
return res;
}
}
//参考力扣原解