zoukankan      html  css  js  c++  java
  • LeetCode Spiral Matrix

    LeetCode解题之Spiral Matrix


    原题

    将一个矩阵中的内容螺旋输出。

    注意点:

    • 矩阵不一定是正方形

    样例:

    输入: matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
    ]

    输出: [1, 2, 3, 6, 9, 8, 7, 4, 5]

    解题思路

    控制好当前遍历的边界,不断的向内缩进。

    须要注意的是,缩到最里面的时候可能会出现下面几种情况:

    中心剩下一个数值
    ———
    |3|
    ———
    
    中心横向多个数值
    —————————
    |3 4 5 6|
    —————————
    
    中心纵向多个数值
    ———
    |2|
    |3|
    |4|
    ———

    分别处理一下就可以。

    AC源代码

    class Solution(object):
        def spiralOrder(self, matrix):
            """
            :type matrix: List[List[int]]
            :rtype: List[int]
            """
            if not matrix:
                return []
            left = top = 0
            right = len(matrix[0]) - 1
            bottom = len(matrix) - 1
    
            result = []
            while left < right and top < bottom:
                for i in range(left, right):
                    result.append(matrix[top][i])
                for i in range(top, bottom):
                    result.append(matrix[i][right])
                for i in range(right, left, -1):
                    result.append(matrix[bottom][i])
                for i in range(bottom, top, -1):
                    result.append(matrix[i][left])
                left += 1
                right -= 1
                top += 1
                bottom -= 1
            if left == right and top == bottom:
                result.append(matrix[top][left])
            elif left == right:
                for i in range(top, bottom + 1):
                    result.append(matrix[i][left])
            elif top == bottom:
                for i in range(left, right + 1):
                    result.append(matrix[top][i])
            return result
    
    
    if __name__ == "__main__":
        assert Solution().spiralOrder([
            [1, 2, 3],
            [4, 5, 6],
            [7, 8, 9]
        ]) == [1, 2, 3, 6, 9, 8, 7, 4, 5]
        assert Solution().spiralOrder([[2], [3]]) == [2, 3]
        assert Solution().spiralOrder([[2, 3]]) == [2, 3]

    欢迎查看我的Github (https://github.com/gavinfish/LeetCode-Python) 来获得相关源代码。

  • 相关阅读:
    CSP-201512
    SCC-Tarjan
    CSP-201509
    Codeforces Round #612 (Div. 2)/A/B/C/D
    CF-Hello 2020/A/B/C
    Anaconda介绍、安装及使用教程
    Linux 新手应该知道的 26 个命令
    Python编码规范:IF中的多行条件
    Python assert 断言函数
    数据结构常见的八大排序算法(详细整理)
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/8921940.html
Copyright © 2011-2022 走看看