LeetCode 腾讯精选练习50——007 整数反转

LeetCode 007 整数反转


Author: Labyrinthine Leo   Init_time: 2021.01.14


Index Words: LeetCode 007


公众号:Leo的博客城堡


题目

  • 整数反转
  • 题号:007
  • 难度:简单
  • https://leetcode-cn.com/problems/reverse-integer/

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

示例 1:

输入: 123
输出: 321

示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

示例 4:

输入: 1534236469
输出: 0

示例 5:

输入: -2147483648
输出: 0

注意:

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

Python实现

1、逆序取值法

思路:简单题,简单讲一下方法。首先考虑特殊情况,提取系数,按照整数转换,转换方法:循环提取尾数并乘10,直到最后一位累加即可。例如:x = -123,取系数k = -1,转正x = 123 -> 取余x % 3 -> y = 3*10 = 30,取x = 12 -> 取y = (30+2)*10 = 320 -> y = 320+1 -> y = k * y = -321

  • 状态:通过
  • 执行用时: 36 ms, 在所有 python3 提交中击败了 90.03% 的用户
  • 内存消耗: 14.7 MB, 在所有 python3 提交中击败了 26.38% 的用户
# coding  : utf-8
# fun     : Leetcode 007 整数反转
# @Author : Labyrinthine Leo
# @Time   : 2021.01.14

class Solution:
	def reverse(self, x: int) -> int:
		k = -1 if x < 0 else 1 # 系数
		x = -x if x < 0 else x # 取正
		y = 0 # 初始值
		while x >= 10:
			y = (y + x%10) * 10 # 取尾部余数求值
			x = x // 10
		y = k * (y + x)
		if y < -(2**31) or y > (2**31 - 1): # 特判
			return 0
		else:
			return y

# 测试用例
x = 1534236469
s = Solution()
print(s.reverse(x))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值