题解 | #螺旋矩阵#

螺旋矩阵

https://www.nowcoder.com/practice/7edf70f2d29c4b599693dc3aaeea1d31

class Solution:
    def spiralOrder(self , matrix: List[List[int]]) -> List[int]:
        # write code here
        if len(matrix) == 0:
            return None

        left = 0
        right = len(matrix[0]) - 1
        up = 0
        down = len(matrix) - 1

        res = []

        while left <= right and up <= down:
            for i in range(left, right+1):
                res.append(matrix[up][i])
            
            up += 1

            if up > down:
                break
            
            for i in range(up, down+1):
                res.append(matrix[i][right])
            
            right -= 1
            if right < left:
                break
            
            i = right
            while i >= left:
                res.append(matrix[down][i])
                i -= 1
            
            down -= 1
            if up > down:
                break

            i = down
            while i >= up:
                res.append(matrix[i][left])
                i -= 1
            
            left += 1
            if left > right:
                break
            
        return res

解题思路

先设置上下左右边界,并开始遍历矩阵:

  • 从左至右遍历,完成后边界加一,并判断上下边界是否重合;
  • 从上到下遍历,完成后边界减一,并判断左右边界是否重合;
  • 从右到左遍历,完成后边界减一,并判断上下边界是否重合;
  • 从下到上遍历,完成后边界加一,并判断左右边界是否重合。

复杂度

  • 时间复杂度为O(mn);
  • 空间复杂度为O(1)。
全部评论

相关推荐

09-21 23:16
门头沟学院 Java
传奇逃兵王:招不起就别招,叽里咕噜说啥呢
点赞 评论 收藏
分享
10-02 19:29
已编辑
浙江科技大学 运营
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务