題目
難度:★☆☆☆☆
類型:數學
如果一個矩陣的每一方向由左上到右下的對角線上具有相同元素,那么這個矩陣是托普利茨矩陣。
給定一個 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)])
如果內存限制,無法一次性加載矩陣,可以每相鄰兩行加載比較。
如有疑問或建議,歡迎評論區留言~