python 取余数判断是否是最后一个元素_通过整数反转学Python

这篇博客介绍了如何用Python反转32位有符号整数,包括三种方法:字符串转换、join()与reversed()结合、以及利用位运算和取余数。讨论了每种方法的时间和内存消耗,并涉及Python的算术运算符、位运算符及其赋值运算符的应用。
摘要由CSDN通过智能技术生成

↑ 点击上方“静悦悠然”关注我们

整数反转

题目(LeetCode)

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例 1: 输入: 123 输出: 321示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: 21

注意

假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2**31,  2**31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

解法一

思路

将整数类型转换为字符串类型,判断其第一位是否是负号,如果是则单独提取出来,然后进行反向切片即完成了翻转,再转化为整数类型,最后判断其结果是否在  [−2**31,  2**31 − 1] 内,如果在返回 0。

特点

消耗时间相对较长,内存消耗较小

代码

class Solution(object):    def reverse(self, x: int) -> int:        x = str(x)        a = ''        if x[0] == '-':            a += '-'            x = x[1:]        a += x[::-1]        x = int(a)        if x < -2 ** 31 or x > 2 ** 31 - 1:            return 0        return xtarget = -123solution = Solution()print(solution.reverse(target))
解法二

思路

将解法一中的反向切片换成 join() 方法和 reversed() 方法进行翻转,其余不变。

特点

消耗时间相对较少,消耗内存相对较多

代码

class Solution:    def reverse(self, x: int) -> int:        x = str(x)        b = x[0]        a = ''        if b == '-':            a += '-'            x = x[1:]        a += ''.join(reversed(x))        x = int(a)        if x < -2 ** 31 or x > 2 ** 31 - 1:            return 0        return xtarget = 123solution = Solution()print(solution.reverse(target))

知识点

  • reversed 函数返回一个反转的迭代器。

  • Python join() 方法用于将序列(迭代器)中的元素以指定的字符连接生成一个新的字符串。

解法三

思路

使用Python的算术运算符求解,循环将 x 的最后一个数字取出,然后放在 z 的后面,每次循环时检查 z 是否溢出。

每次循环时,将 z 乘上 10 即个位数为 0 ,加上 y 除以 10 的余数(即 y 的最后一位数),举例:

51 * 10  + 752 % 10 = 510 + 2 = 512

再将 y 整除 10 向下取整,得到拿掉最后一位数之后的值,举例:

752 // 10  =  75

特点

消耗时间相对较少,消耗内存相对较少

代码

class Solution(object):    def reverse(self, x: int) -> int:        y, z = abs(x), 0        a = (1 << 31) - 1 if x > 0 else 1 << 31        while y != 0:            z = z * 10 + y % 10            if z > a:                return 0            y //= 10        return z if x > 0 else -ztarget = -3216456solution = Solution()print(solution.reverse(target))

知识点

  • abs() 方法获取数字的绝对值。

  • 1 << 31 等于 2 ** 31

  • y //= 10  等于 y = y // 10

python位运算符

按位运算符是把数字看作二进制来进行计算的。Python中的按位运算法则如下:

下例中变量 a 为 60,b 为 13,相应的二进制格式如下:

a = 0011 1100

b = 0000 1101

  • a&b

按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0. (a & b) 输出结果 12 ,二进制解释:0000 1100
  • a|b

按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。(a | b) 输出结果 61 ,二进制解释:0011 1101
  • a^b

按位异或运算符:当两对应的二进位相异时,结果为1(a ^ b) 输出结果 49 ,二进制解释:0011 0001
  • ~a

按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1 。~x 类似于 -x-1(~a ) 输出结果 -61 ,二进制解释:1100 0011,在一个有符号二进制数的补码形式。
  • a << 2

左移动运算符:运算数的各二进位全部左移若干位,由 <a << 2 输出结果 240 ,二进制解释:1111 0000
  • a >> 2

右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,>> 右边的数字指定了移动的位数a >> 2 输出结果 15 ,二进制解释:0000 1111

python赋值运算符

  • =   简单的赋值运算符   c = a + b 将 a + b 的运算结果赋值为 c

  • += 加法赋值运算符    c += a 等效于 c = c + a

  • -=  减法赋值运算符    c -= a 等效于 c = c - a

  • *=  乘法赋值运算符    c *= a 等效于 c = c * a

  • /=  除法赋值运算符    c /= a 等效于 c = c / a

  • %= 取模赋值运算符    c %= a 等效于 c = c % a

  • **=    幂赋值运算符    c **= a 等效于 c = c ** a

  • //=    取整除赋值运算符   c //= a 等效于 c = c // a   (向下取整,例:9 // 2 = 4)

944320f9748a8c21db2ca365017279c3.png

文章不错,点个在看吧!

8ae11c4e899aaab70a39f5b6bab4df8e.gif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值