Python_Leetcode_7_整数反转

1.背景

Leetcode专栏目的:希望给学习算法的朋友提供一些想法,也希望有大佬能够通过评论提供宝贵的意见。

Leetcode专栏方式:将展示实现代码的多种实现方式,并且对算法复杂度进行比较。由于笔者偏好,代码全部使用python实现。

本期题目: https://leetcode-cn.com/problems/reverse-integer/
在这里插入图片描述
在这里插入图片描述

2.解题方式

本次介绍循环、字符串反转两种解题方式

2.1 循环

本方法采用flag进行正负数标记,利用循环进行数值反转。

class Solution:
    def reverse(self, x: int) -> int:
        flag = (x > 0 and 2 or 1)
        x = (flag == 1 and -x or x)
        result = 0
        while x:
            result *= 10
            result += x % 10
            x //= 10
        result = (-1)**flag*result

        if result > 2147483647 or result < -2147483648:
            return 0
        return result

2.2 字符串反转

字符串反转方法是先用flag标记数值正负,然后统一用正数进行字符串反转,再利用flag进行正负还原。

class Solution:
    def reverse(self, x: int) -> int:
        flag = (x > 0 and 2 or 1)
        x = (flag == 1 and str(-x)[::-1] or str(x)[::-1])
        x = (flag == 1 and -1*int(x) or int(x))

        if x > 2147483647 or x < -2147483648:
            return 0
        return x

在这里插入图片描述

3.总结

这个题目我在某大厂二面的过程中遇到过,题目很简单,在后期交流的过程中得知出彩点在于:

  • 考虑到两种解题思路,实际上还可以有递归的方式,这不做解释,感兴趣可以自己实现。
  • if-else语句使用很灵活。

因此在这总结一些简单易理解的if-else变化:

普通写法:这种写法在简单的if-else是表现得过于啰嗦

if a>b:
    c = a
else:
    c = b

表达式:真时放if前,这种可读性比较好

c = a if a>b else b

二维列表:利用大小判断的0,1当作索引。这种思路比较好,但是实践上效果一般

c= [b, a][a > b]

逻辑运算符:虽然简单,却发挥无限能量。

c = (a>b and a or b)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值