Leetcode_Python 54 螺旋矩阵

Leetcode_Python 54 螺旋矩阵_第1张图片

解题思路

以每层圈为单位,遍历矩阵
矩阵层数计算方式为:lay_num = (min(width,length)+1)//2
每层分为从左到右、从上到下、从右到左、从下到上四个循环
注意每一层循环的开始位置和结束位置是解决本问题的关键

当某一层只有一行 或者 一列的时候(有可能都满足,即只有一个元素)
就不需要再执行第三个 或者 第四个和循环,否则会被重复输出。

代码

class Solution(object):
    def spiralOrder(self, matrix):
        """
        :type matrix: List[List[int]]
        :rtype: List[int]
        """
    
        import math
        if matrix == []:
            return matrix
        list1 = []
        wide = len(matrix[0])
        high = len(matrix)
        rounds = (min(wide,high)+1)//2
        for i in range(rounds):  #轮次逐层计算  
            for j in range(4):  #表示4个边,我们顺时针计算
                if j == 0:  #表示上边
                    list1 = list1 + [matrix[i][z] for z in range(i,wide - i)]
                elif j == 1:  #表示右边
                    list1 = list1 + [matrix[z][wide- i -1] for z in range(i + 1,high - i)]
                elif j == 2 and high - i -1 != i: #下方
                    list1 = list1 + [matrix[high - i -1][z] for z in range(wide - i - 2,i-1,-1)]
                elif j == 3 and wide - i - 1 != i: #左边
                    list1 = list1 + [matrix[z][i] for z in range(high - i - 2,i,-1)]     
        return list1

你可能感兴趣的:(LeetCode)