<LeetCode天梯>Day016 整数反转(暴力求解+直接反转) | 初级算法 | Python
Posted 府学路18号车神
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了<LeetCode天梯>Day016 整数反转(暴力求解+直接反转) | 初级算法 | Python相关的知识,希望对你有一定的参考价值。
💖作者简介:大家好,我是车神哥,府学路18号的车神🥇
📝个人主页:应无所住而生其心的博客_府学路18号车神_CSDN博客
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
📖本系列主要以刷LeetCode(力扣)网站的各类题为标准,实现自我能力的提升为目标⚡
⚡希望大家多多支持🤗~一起加油 😁
- 专栏《LeetCode天梯》
周三,xdm,北京今天热起来了还,好久没出去玩了,哎!疫情尽快结束吧!疫情依旧反复,大家带好口罩啊~ 继续继续,来,今天和车神哥一起来提升自己的Python编程和面试能力吧,刷天梯~
以下为我的天梯积分规则:
每日至少一题:一题积分+10分
若多做了一题(或多一种方法解答),则当日积分+20分(+10+10)
若做了三道以上,则从第三题开始算+20分(如:做了三道题则积分-10+10+20=40;做了四道题则积分–10+10+20+20=60)
初始分为100分
若差一天没做题,则扣积分-10分(周六、周日除外注:休息)
坚持!!!
初级算法
刷题目录
字符串
题干
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [ − 2 31 −2^{31} −231, 2 31 2^{31} 231 − 1] ,就返回 0。
示例1:
输入:x = 123
输出:321
示例2:
输入:x = -123
输出:-321
示例3:
输入:x = 120
输出:21
示例4:
输入:x = 0
输出:0
暴力反转
分析:
我们的数字长度可能超过32位,也可能不超过,则设置两个条件;由于是有符号的数,那我们符号得保留下来,仅对数字进行反转,符号不变。
我们可以将数字转换为字符串单个字符放在数组里面,然后再进行上一题的转换,这样就没毛病了。
class Solution:
def reverse(self, x: int) -> int:
t = list(str(x)) # 将数字转换成字符数组
# t = list(map(str, str(x)))
n = len(t)
left = n-1
right = 1
right2 = 0
if t[0] == '-':
for i in range((n-1)//2):
t[right], t[left] = t[left], t[right]
right += 1
left -= 1
tt = int(''.join(t))
if tt <= (2**31-1) and tt >= (-2**31):
return tt
else:
return 0
else:
if n == 1:
return x
else:
for j in range(n//2):
t[right2], t[left] = t[left], t[right2]
right2 += 1
left -= 1
tt = int(''.join(t))
if tt<= (2**31-1) and tt >= (-2**31):
return tt
else:
return 0
感觉这个办法很笨,也很慢,我们还需要再优化优化
直接反转
数字嘛,我们针对数字那就直接反转,个位十位百位千位嘛,就是系数乘以10的倍数呗、我们只需要将个位变为最高位,十位变为第二高位,以此类推,这样会快一些。首先判断是否为0,否则返回0.还得判断是否为负数,如果为负数则先统一为正,然后再添上符号。
引用一下大佬的图片
class Solution:
def reverse(self, x: int) -> int:
flag = False # 设置标识符
if x < 0: # 判断正负
flag = True
x = abs(x) # 绝对值化
res = 0 # 设置初值
while x != 0:
res *= 10 # 加权移位
temp = x % 10 # 取余
x //= 10 # 地板除
res += temp # 赋值
if flag: # 回归负
res = 0 - res
if res < 0 - 2 ** 31:
return 0
if res > 2 ** 31 - 1: # 正值
return 0
return res
速度有所提升,但内存消耗没有上面的表现的好,感觉和我第一个的方法差不多,哎!~
加油吧!~
❤
References
作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnx13t/
来源:力扣(LeetCode)
作者:数据结构和算法
链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnx13t/?discussion=ukHfZx
来源:力扣(LeetCode)
今日得分:+10 +10
总得分:370 (后面两种走捷径的方法就不加分了今天,哈哈)加油!!!
❤坚持读Paper,坚持做笔记,坚持学习,坚持刷力扣LeetCode❤!!!
坚持刷题!!!打天梯!!!
⚡To Be No.1⚡⚡哈哈哈哈
⚡创作不易⚡,过路能❤关注、收藏、点个赞❤三连就最好不过了
ღ( ´・ᴗ・` )
❤
『
明明付出远高于回报,却依旧选择硬着头皮做下去。只为了能在还未触及到的未来帮到你。或许这就是傻白甜吧。
』
以上是关于<LeetCode天梯>Day016 整数反转(暴力求解+直接反转) | 初级算法 | Python的主要内容,如果未能解决你的问题,请参考以下文章
<LeetCode天梯>Day045 罗马数字转整数(哈希表) | 初级算法 | Python
<LeetCode天梯>Day029环形链表(哈希表+双指针) | 初级算法 | Python
<LeetCode天梯>Day003 买卖股票的最佳时机 II(动态规划法) | 初级算法 | Python
<LeetCode天梯>Day027 合并两个有序链表(递归法+改进递归) | 初级算法 | Python