LeetCode算法个人解答——7.反转整数

xiaoxiao2025-06-11  35

题目

给定一个 32 位有符号整数,将整数中的数字进行反转。 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: 21 注意: 假设我们的环境只能存储 32 位有符号整数,其数值范围是 [231, 2311]。根据这个假设,如果反转后的整数溢出,则返回 0

思路

1.先判断整数的符号并保存下来 2.取整数的绝对值,方便之后的运算 3.通过取余运算符%取得余数,即当前整数的个位数 3.1 由于整数最高位不能为0,需要判断新的整数是否不为0 4.将取到的余数依次赋值给一个新的数字 5.全部反转后再加上正负号 5.1 判断数字是否在范围之内

解1(同样审题不清,整体都写出来了,但取值范围忘记写了,导致错误)

class Solution: def reverse(self, x): """ :type x: int :rtype: int """ # 判断 x 的正负 if x >= 0: flag = 1 # x 为正 else: flag = 0 # x 为负 # 取x的绝对值 x = abs(x) # 创建一个标志位 i ,保证反转后的数最高为不为 0 i = 0 # 创建一个整数,用于保存和返回结果 res = 0 # 判断 x 是否为 0,判断是否取到了最后一个值 while x != 0: # 取 x 的个位数 y y = x % 10 # 取 x/10 整数部分 x = x // 10 # 判断 y 是否是0(为了防止前n位是0,导致报错) if i == 0: if y == 0: continue # 直接进入下一个循环 else: i = 1 # 确定了最高位不为 0,以后不再判断 y 是否为0,防止误判 # 确定了最高位的数不为 0 res = res * 10 + y # 判断 res 是否是负数 if flag == 0: # 通过flag,res 应该是负数,将 res 取反 res = -res # 返回 res return res

解2(执行时间76ms)

只是在解1的基础上加上了 res 取值范围的判断

class Solution: def reverse(self, x): """ :type x: int :rtype: int """ # 判断 x 的正负 if x >= 0: flag = 1 # x 为正 else: flag = 0 # x 为负 # 取x的绝对值 x = abs(x) # 创建一个标志位 i ,保证反转后的数最高为不为 0 i = 0 # 创建一个整数,用于保存和返回结果 res = 0 # 判断 x 是否为 0,判断是否取到了最后一个值 while x != 0: # 取 x 的个位数 y y = x % 10 # 取 x/10 整数部分 x = x // 10 # 判断 y 是否是0(为了防止前n位是0,导致报错) if i == 0: if y == 0: continue # 直接进入下一个循环 else: i = 1 # 确定了最高位不为 0,以后不再判断 y 是否为0,防止误判 # 确定了最高位的数不为 0 res = res * 10 + y # 判断 res 是否是负数 if flag == 0: # 通过flag,res 应该是负数,将 res 取反 res = -res # 判断 res 是否在[−2**31, 2**31 − 1]中 if res >= (-2 ** 31) and res <= (2 ** 31 - 1): # 返回 res return res else: # 返回0 return 0

解3(最佳答案,52ms)

class Solution: def reverse(self, x): """ :type x: int :rtype: int """ # 将x的绝对值转换成字符串,然后反转,再转回整数类型 reverse_num=int(str(abs(x))[::-1]) # 判断二进制的长度是否超过31 if reverse_num.bit_length() > 31: return 0 else: # 如果x>0,返回reverse_num,如果不是,返回-reverse_num return reverse_num if x > 0 else -reverse_num
转载请注明原文地址: https://www.6miu.com/read-5031636.html

最新回复(0)