leetcode螺旋矩陣 逆天的代碼

題目描述

給定一個包含 m x n 個元素的矩陣(m 行, n 列),請按照順時針螺旋順序,返回矩陣中的所有元素。

示例 1:

輸入:
[
 [ 1, 2, 3 ],
 [ 4, 5, 6 ],
 [ 7, 8, 9 ]
]
輸出: [1,2,3,6,9,8,7,4,5]
示例 2:

輸入:
[
  [1, 2, 3, 4],
  [5, 6, 7, 8],
  [9,10,11,12]
]
輸出: [1,2,3,4,8,12,11,10,9,5,6,7]

方法一

  1. 這不是我寫的
  2. 此人充分利用了python特性,用極其簡單的代碼完成了任務,十分佩服
  3. 歎爲觀止
class Solution:
    def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
        res = []
        while matrix:
            res += matrix.pop(0)
            matrix = list(map(list, zip(*matrix)))[::-1]
        return res

方法二 錯誤

  1. 自己寫的代碼
  2. 將問題看成是一個遞歸問題,輸入是一個矩陣A,然後打印他的四周的數字,不斷地進行下去就可以了,當然下一次傳入的矩陣B是矩陣A去掉了四周的元素
  3. 終止條件是此矩陣要麼只有一行,要麼只有一列, 按照順序打印就可以了

之前的錯誤原因

  1. leetcode運行機制應該是創建了一個Solution的實例,然後去調用函數測試每一個待測數據。
  2. 我使用了類變量,導致整個類變量一直存在,在測試了第二個數據的時候,我的Solution實例中的res沒有清空,保存的是之前的結果,導致程序結果出錯,這就是類變量的不好地方

改進方法

  1. 在函數內部一開始就將類變量清空,不讓歷史結果影響當前的函數運行的結果
import numpy as np

class Solution(object):
    res = list()

    def spiralOrder(self, matrix):
        Solution.res = list()
        self.helper(matrix)
        return Solution.res

    def helper(self, matrix):
        if matrix is None or len(matrix) == 0 or len(matrix[0]) == 0:
            return Solution.res
        row = len(matrix)
        col = len(matrix[0])
        if row == 1:
            # 只剩一行 橫向打印
            for i in range(col):
                Solution.res.append(matrix[0][i])
            return Solution.res
        if col == 1:
            # 只剩一列 豎向打印
            for i in range(row):
                Solution.res.append(matrix[i][col - 1])
            return Solution.res

        # 從左到右
        for i in range(col):
            Solution.res.append(matrix[0][i])
        # 從上到下
        for i in range(1, row):
            Solution.res.append(matrix[i][col - 1])
        # 從右到左
        for j in range(col - 2, -1, -1):
            Solution.res.append(matrix[row - 1][j])
        # 從下到上
        for j in range(row - 2, 0, -1):
            Solution.res.append(matrix[j][0])
        matrix = np.array(matrix)
        new_matrix = matrix[1: len(matrix) - 1, 1: len(matrix[0]) - 1]
        self.helper(new_matrix)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章