欢迎来到
银狐的个人博客

<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 <LeetCode天梯>Day016 整数反转(暴力求解+直接反转) | 初级算法 | Python 第1张图片-银狐博客 −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] == '<LeetCode天梯>Day016 整数反转(暴力求解+直接反转) | 初级算法 | Python 第2张图片-银狐博客-':            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

⚡⚡哈哈哈哈


⚡创作不易⚡,过路能❤关注、收藏、点个赞❤三连就最好不过了

ღ( ´・ᴗ・` )

『 明明付出远高于回报,却依旧选择硬着头皮做下去。只为了能在还未触及到的未来帮到你。或许这就是傻白甜吧。 』

赞(0) 打赏
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《<LeetCode天梯>Day016 整数反转(暴力求解+直接反转) | 初级算法 | Python》
文章链接:https://www.yinhu3.com/1763.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
如果文章侵犯到你的权益,请查看本站免责声明:《免责声明》

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

愿意请我喝杯矿泉水吗

支付宝扫一扫打赏