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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章