题解 | #螺旋矩阵# | 二维转一维 | 螺旋方式展开

螺旋矩阵

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

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param matrix int整型二维数组
# @return int整型一维数组


class Solution:
    # 顺时针展开
    def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
        res = []
        m = len(matrix)
        if m <= 0:
            return res
        n = len(matrix[0])
        x1, x2, y1, y2 = 0, n, 0, m
        while x1 < x2 and y1 < y2:
            for i in range(x1, x2):
                res.append(matrix[y1][i])
            y1 += 1
            for j in range(y1, y2 - 1):
                res.append(matrix[j][x2 - 1])
            x2 -= 1
            if y1 == y2:  # 针对单行情况,不左行
                break
            for i in range(x2, x1 - 1, -1):
                res.append(matrix[y2 - 1][i])
            y2 -= 1
            if x1 == x2:  # 针对单列情况,不上行
                break
            for j in range(y2 - 1, y1 - 1, -1):
                res.append(matrix[j][x1])
            x1 += 1
        return res

    # # 逆时针展开
    # def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
    #     res = []
    #     m = len(matrix)
    #     if m <= 0:
    #         return res
    #     n = len(matrix[0])
    #     x1, x2, y1, y2 = 0, n, 0, m
    #     while x1 < x2 and y1 < y2:
    #         for j in range(y1, y2):
    #             res.append(matrix[j][x1])
    #         x1 += 1
    #         for i in range(x1, x2 - 1):
    #             res.append(matrix[y2 - 1][i])
    #         y2 -= 1
    #         if x1 == x2:  # 针对单列情况,不上行
    #             break
    #         for j in range(y2, y1 - 1, -1):
    #             res.append(matrix[j][x2 - 1])
    #         x2 -= 1
    #         if y1 == y2:  # 针对单行情况,不左行
    #             break
    #         for i in range(x2 - 1, x1 - 1, -1):
    #             res.append(matrix[y1][i])
    #         y1 += 1
    #     return res

全部评论

相关推荐

点赞 评论 收藏
分享
06-12 17:46
门头沟学院 Java
运营你豪哥:来说重点: ​1.项目前置,时间倒序。​​ 2.​项目描述强化结果与量化效果(STAR原则里的R)。​​ ​3.个人技能精炼,明确掌握程度,突出核心。​​ ​4.增加强有力开头的个人总结部分。​​ 5.​优化教育背景(成绩排名)、合并奖项与活动。​​
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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