Leetcode 006-008 Z字形 反转整数 字符串转整数python

先说简单的,反转整数。

这个在python通过类型转换非常好实现,注意一下有负号的情况即可。


接下来是字符串转整数。

这也非常简单,利用strip先把最前面的空格给去掉。

再一个个比对,如果遇到非数字就结束。

比较坑的点是它直接给你空字符串或者 "+" ,"-",所以还是比较烦的。

class Solution:
    def myAtoi(self, str):
        """
        :type str: str
        :rtype: int
        """
        str = str.strip()
        if not str[0].isdigit():
            if str[0] != '-' and str[0] != '+':
                return 0
        res = str[0]
        i = 1
        while i < len(str):
            if not str[i].isdigit():
                break
            res += str[i]
            i += 1
        ans = int(res)
        if ans > 2**31 -1 :
            ans = 2**31 - 1
        elif ans < -(2**31):
            ans = -2**31
        return ans


比较有意思的是Z字形输出。

首先看到这个Z字形,因为它输出不需要带空格,所以你不要看空格,那只会影响你的思考。等于说把结果看成若干个行数相等(斜的部分不相同,把同一斜列看成同一竖列)的竖列并排排列的结果。

这样看就清晰很多,我们可以建立一个二维数组,inner list 代表每一行。思路为我们每次取一个字符然后向它应该在的行填进去。

那这个填充顺序也非常有规律,因为一开始是从上至下,接着从下至上,后来又从上至下。所以方向是不断在变的,我们需要一个方向常量,在某些特殊节点我们变换方向。于是问题就在于怎么找这个节点和你的结构控制了。

class Solution:
    def convert(self, s, numRows):
        """
        :type s: str
        :type numRows: int
        :rtype: str
        """
        if numRows == 1:
            return s
        a = [[]for i in range(numRows)]
        r = 0
        direction = 1
        for i in s:
            a[r].append(i)
            if r == numRows - 1:
                direction = -1
            elif r == 0:
                direction = 1
            r += direction
        res = ""
        for row in a:
            for col in row:
                res += col
        return res

填充完了之后,我们只需把遍历每一行每一个然后返回即可。

所以这道题主要在于看你能不能找到Z字形运动的规律,以及看你用什么数据结构去储存数据。

猜你喜欢

转载自blog.csdn.net/weixin_41958153/article/details/80546561
今日推荐