题目描述
自己解法
对于一个 M × N M×N M×N矩阵,遍历前 M − 1 M-1 M−1行的前 N − 1 N-1 N−1个元素,假设下标为 ( i , j ) (i,j) (i,j),若该元素与下标为 ( i + 1 , j + 1 ) (i+1,j+1) (i+1,j+1)的元素相等,则满足题目条件,若不相等,则不满足。时间复杂度 O ( M × N ) O(M×N) O(M×N),空间复杂度 O ( 1 ) O(1) O(1)。
class Solution:
def isToeplitzMatrix(self, matrix: List[List[int]]) -> bool:
isToeplitzMatrix = True
M,N = len(matrix),len(matrix[0])
for i in range(M-1):
for j in range(N-1):
if matrix[i][j] != matrix[i+1][j+1]:
isToeplitzMatrix = False
return isToeplitzMatrix
题解区
除了自己解法以外,还有一种解法是检查对角线元素:
class Solution(object):
def isToeplitzMatrix(self, matrix):
groups = {}
for r, row in enumerate(matrix):
for c, val in enumerate(row):
if r-c not in groups:
groups[r-c] = val
elif groups[r-c] != val:
return False
return True
与自己解法类似的简易代码是:
class Solution(object):
def isToeplitzMatrix(self, matrix):
return all(r == 0 or c == 0 or matrix[r-1][c-1] == val
for r, row in enumerate(matrix)
for c, val in enumerate(row))
参考:官方解答