day2(力扣)整数反转(python实现)

题目描述: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为取出来的最后以为的数字,完成这一步之后我们在将正负性进行确定即可得到最终结果。由于该方法过于繁琐,小编并不推荐该方法(毕竟第一个那么快)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值