題目
難度:★☆☆☆☆
類(lèi)型:數(shù)學(xué)
如果一個(gè)矩陣的每一方向由左上到右下的對(duì)角線(xiàn)上具有相同元素,那么這個(gè)矩陣是托普利茨矩陣。
給定一個(gè) M x N 的矩陣,當(dāng)且僅當(dāng)它是托普利茨矩陣時(shí)返回 True。
說(shuō)明
matrix 是一個(gè)包含整數(shù)的二維數(shù)組。
matrix 的行數(shù)和列數(shù)均在 [1, 20]范圍內(nèi)。
matrix[i][j] 包含的整數(shù)在 [0, 99]范圍內(nèi)。
進(jìn)階
如果矩陣存儲(chǔ)在磁盤(pán)上,并且磁盤(pán)內(nèi)存是有限的,因此一次最多只能將一行矩陣加載到內(nèi)存中,該怎么辦?
如果矩陣太大以至于只能一次將部分行加載到內(nèi)存中,該怎么辦?
示例
示例 1
輸入:
matrix = [
[1,2,3,4],
[5,1,2,3],
[9,5,1,2]
]
輸出: True
解釋:
在上述矩陣中, 其對(duì)角線(xiàn)為:
"[9]", "[5, 5]", "[1, 1, 1]", "[2, 2, 2]", "[3, 3]", "[4]"。
各條對(duì)角線(xiàn)上的所有元素均相同, 因此答案是True。
示例 2
輸入:
matrix = [
[1,2],
[2,2]
]
輸出: False
解釋:
對(duì)角線(xiàn)"[1, 2]"上的元素不同。
解答
托普利茨矩陣有一個(gè)重要屬性:
上一行去掉最后的元素同下一行去掉最開(kāi)始的元素相等。
根據(jù)這個(gè)原則,我們可以作出判斷。
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
下面有個(gè)緊湊寫(xiě)法:
class Solution:
def isToeplitzMatrix(self, matrix):
return all([matrix[i][:-1] == matrix[i+1][1:] for i in range(len(matrix)-1)])
如果內(nèi)存限制,無(wú)法一次性加載矩陣,可以每相鄰兩行加載比較。
如有疑問(wèn)或建議,歡迎評(píng)論區(qū)留言~