766. 托普利茨矩陣(Python)

題目

難度:★☆☆☆☆
類型:數學

如果一個矩陣的每一方向由左上到右下的對角線上具有相同元素,那么這個矩陣是托普利茨矩陣。

給定一個 M x N 的矩陣,當且僅當它是托普利茨矩陣時返回 True。

說明
matrix 是一個包含整數的二維數組。
matrix 的行數和列數均在 [1, 20]范圍內。
matrix[i][j] 包含的整數在 [0, 99]范圍內。

進階

如果矩陣存儲在磁盤上,并且磁盤內存是有限的,因此一次最多只能將一行矩陣加載到內存中,該怎么辦?
如果矩陣太大以至于只能一次將部分行加載到內存中,該怎么辦?

示例

示例 1
輸入:
matrix = [
[1,2,3,4],
[5,1,2,3],
[9,5,1,2]
]
輸出: True
解釋:
在上述矩陣中, 其對角線為:
"[9]", "[5, 5]", "[1, 1, 1]", "[2, 2, 2]", "[3, 3]", "[4]"。
各條對角線上的所有元素均相同, 因此答案是True。

示例 2
輸入:
matrix = [
[1,2],
[2,2]
]
輸出: False
解釋:
對角線"[1, 2]"上的元素不同。

解答

托普利茨矩陣有一個重要屬性:

上一行去掉最后的元素同下一行去掉最開始的元素相等。

根據這個原則,我們可以作出判斷。

class Solution:
    def isToeplitzMatrix(self, matrix):
        for i in range(len(matrix)-1):
            if not matrix[i][:-1] == matrix[i+1][1:]:
                return False
        return True

下面有個緊湊寫法:

class Solution:
    def isToeplitzMatrix(self, matrix):
        return all([matrix[i][:-1] == matrix[i+1][1:] for i in range(len(matrix)-1)])

如果內存限制,無法一次性加載矩陣,可以每相鄰兩行加載比較。

如有疑問或建議,歡迎評論區留言~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。