美文网首页
每天(?)一道LeetCode(9) Spiral Matrix

每天(?)一道LeetCode(9) Spiral Matrix

作者: 失业生1981 | 来源:发表于2019-01-23 22:11 被阅读0次

Array

054. Spiral Matrix

Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
即 给定一个m*n的矩阵,顺时针输出矩阵中的元素
举个栗子
Input:
\left[ \begin{matrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{matrix} \right]
Output:
[1,2,3,4,8,12,11,10,9,5,6,7]

Solutions

先考虑第一行,第一行直接加入list,
再考虑最右边一列,把矩阵每行最后一个元素加入list
然后考虑最后一行,最后一行逆序加入list
最后考虑最左边一列,把矩阵每行第一个元素取出来然后逆序加入list

把加入list的元素删除,那么第一轮结束后,我们就把矩阵最外层的元素按顺序都加入了list,剩下了一个新的大小为(m-2)*(n-2)的矩阵,继续上述操作,直到只剩下一行直接加入list

class Solution:
    def spiralOrder(self, matrix):
        """
        :type matrix: List[List[int]]
        :rtype: List[int]
        """
        res=[]
        try:
            while len(matrix)>1:
                ##top
                res+=matrix[0]
                matrix.pop(0)
                ##right side
                res+=[x[-1] for x in matrix]
                for x in matrix:
                    x.pop(-1)
                ##bottom
                res+= matrix[-1][::-1]
                matrix.pop(-1)
                ##left side
                res+=[x[0] for x in matrix][::-1]
                for x in matrix:
                    x.pop(0)
                    
            ##now only one row 
            res+=matrix[0]
            return res
        except IndexError:
            return res

相关文章

网友评论

      本文标题:每天(?)一道LeetCode(9) Spiral Matrix

      本文链接:https://www.haomeiwen.com/subject/fqfejqtx.html