题目描述:https://leetcode-cn.com/problems/reverse-integer
题目描述:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
方法一:
分析:从题目输出我们可以看到,当输入的是负数的时候,反转之后的数字依旧是负数,因此我们在对输入进行处理的时候可以首先将数据进行去绝对值操作,然后当将数据的正负性进行保留,我们可以利用flag,当数据大于0时flag为1,否则为-1,在算出最后的结果时我们将其正负性加上去。反转很简单,对于python来讲,最简单的就是先将输入变成字符串,然后反转字符串即可,最后将字符串转换成整数即可得到结果。代码如下:
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
# 定义用来标记给定整数x的正负情况,若x>=0, 则flag=1;反之,则flag=-1
flag = 1
if x >= 0:
flag = 1
else:
flag = -1
#不论x的正负,先将x取绝对值
abs_x = abs(x)
# 将abs(x)变成字符串
x_str = str(abs_x)
# 将字符串x_str反转
reverse_x_str = x_str[::-1]
# 最后恢复成整数
reverse_x_int = int(reverse_x_str) * flag
if -2 ** 31 <= reverse_x_int <= 2**31 - 1:
return reverse_x_int
else:
return 0
方法二:由于此方法比较暴力,我们只叙述其算法思想,不再做具体实现。对于一个数字,我们可以将其模10来取出其最后一位上的数字,直到该数字变成0,每次取模运算之后我们要将原来的数字除以十(这里是进行整数操作,所以除以十之后,原来的数字就会少掉一位),至于数字的正负性以及绝对值的操作与方法一一致
举个简单的例子:比如题目给出的时1234
我们首先将其模10,并将结果赋值给一个临时变量,那么临时变量的值就是4
然后我们将1234除以十,得到123
再将123模10,再次赋值给临时变量,此时临时变量的值就是3
重复…
新的到的数字我们最开始置零,然后利用result_ = result_ * 10 + pop,其中pop为取出来的最后以为的数字,完成这一步之后我们在将正负性进行确定即可得到最终结果。由于该方法过于繁琐,小编并不推荐该方法(毕竟第一个那么快)