相关链接
题目描述
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
题目解析
这道题已经算是很简单的了,将数字反转就可以,重点是不要忽略一些细节,例如原数字末尾是0,以及题中强调的溢出情况。
那么,我的思路是,尽量不使用库函数,设一个flag标志数字正负,用绝对值来反转,接下来就是利用取余,取整将每个数字取出,逆序存储并合并为一个数,最后判断flag来确定是否取负值。return之前要判断一下得到的数是否溢出。
class Solution:
def reverse(self, x: int) -> int:
flag = 0
s = 0
if x<0:
x = -x
flag = 1
a = []
while x>0:
b = x%10
x = x//10
a.append(b)
for i in range(len(a)):
s = s*10+a[i]
if flag == 1:
s = -s
if (s >= -2**31) and (s <= 2**31-1):
return s
else:
return 0
整个过程很基础,但是并不代表不好,当然也可以从原始数据那进行分析溢出情况等,但是写程序一个是让它运行效率高,一个是让编程效率高,何必花心思再去研究呢?
完
精彩推荐