54. Spiral Matrix

这一题的思路是递归,先顺序打印第一行,最后一列。最后一行(倒序),第一列(倒序),打印的过程注意去除重复元素,此时 如果矩阵不为空,可以重复这个过程。如果矩阵为空,就要返回上一级。代码如下:

class Solution(object):
    def spiralOrder(self, matrix):
        """
        :type matrix: List[List[int]]
        :rtype: List[int]
        """
        if len(matrix) == 0:
            return []
        if len(matrix) == 1:
            return matrix[0]
        if len(matrix) == 2:
            return matrix[0] + matrix[1][::-1]
        res = []
        self.dp(matrix, res)
        return res
    def dp(self, matrix, res):
        if len(matrix) == 0:
            return
        if len(matrix[0]) == 0:
            return
        if len(matrix) == 1:
            res += matrix[0]
            return 
        if len(matrix) == 2:
            res += matrix[0]
            res += matrix[1][::-1]
            return
        if len(matrix[0]) == 1:
            for j in range(len(matrix)):
                res.append(matrix[j][0])
            return 
        for i in range(len(matrix[0]) - 1):
            res.append(matrix[0][i])
        for j in range(len(matrix) - 1):
            res.append(matrix[j][-1])
        for i in range(len(matrix[-1])-1,0,-1):
            res.append(matrix[-1][i])
        for j in range(len(matrix)-1,0,-1):
            res.append(matrix[j][0])
        matrix = matrix[1:len(matrix)-1]
        for i in range(len(matrix)):
            matrix[i] = matrix[i][1:len(matrix[i])-1]
        if len(matrix) != 0:
            self.dp(matrix, res)
        return 

你可能感兴趣的:(54. Spiral Matrix)