766. 托普利茨矩陣(Python)

題目

難度:★☆☆☆☆
類(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ū)留言~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容