<LeetCode天梯>Day016 整数反转(暴力求解+直接反转) | 初级算法 | Python

举报
府学路18号车神 发表于 2022/05/11 15:58:00 2022/05/11
【摘要】 以下为我的天梯积分规则:每日至少一题:一题积分+10分 若多做了一题(或多一种方法解答),则当日积分+20分(+10+10)若做了三道以上,则从第三题开始算+20分(如:做了三道题则积分-10+10+20=40;做了四道题则积分–10+10+20+20=60)初始分为100分若差一天没做题,则扣积分-10分(周六、周日除外注:休息)坚持!!! 初级算法 刷题目录 字符串 题干给你一个 32 ...

以下为我的天梯积分规则

每日至少一题:一题积分+10分
若多做了一题(或多一种方法解答),则当日积分+20分(+10+10)
若做了三道以上,则从第三题开始算+20分(如:做了三道题则积分-10+10+20=40;做了四道题则积分–10+10+20+20=60


初始分为100分
若差一天没做题,则扣积分-10分(周六、周日除外注:休息
坚持!!!


初级算法

刷题目录

字符串

在这里插入图片描述

题干

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [ 2 31 −2^{31} , 2 31 2^{31} − 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

⚡⚡


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

ღ( ´・ᴗ・` )


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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。