一、问题描述
如果一个矩阵的每一方向由左上到右下的对角线上具有相同元素,那么这个矩阵是托普利茨矩阵。
给定一个 M x N
的矩阵,当且仅当它是托普利茨矩阵时返回 True
。
示例 1:
输入: matrix = [[1,2,3,4],[5,1,2,3],[9,5,1,2]] 输出: True 解释: 1234 5123 9512 在上面这个矩阵中, 对角线分别是 "[9]", "[5, 5]", "[1, 1, 1]", "[2, 2, 2]", "[3, 3]", "[4]", 各条对角线上的所有元素都相同, 因此答案是True。
示例 2:
输入: matrix = [[1,2],[2,2]] 输出: False 解释: 对角线, 比如: "[1, 2]" 上有不同的元素。
注意:
-
matrix
(矩阵)是一个包含整数的二维数组。 matrix
的行数和列数均在[1, 20]
范围内。matrix[i][j]
包含的整数在[0, 99]
范围内。
二、代码和思路
1.首先从第一行往下开始检测,每次检测当前位置的右下角对角元素是否相等,如果出现不相等则return False
2,然后从第二行元素开始,因为第二行元素的第二个元素与第一行的第一个元素已经做过比较,所以类别来说每次只要从其第一个元素往下检测即可,同样出现不相等则return False
3.最后没检测出不一样则需return True
4.基本遍历了每个元素,且每个元素不重复,则算法时间复杂度为O(m*n)
class Solution(object):
def isToeplitzMatrix(self, matrix):
"""
:type matrix: List[List[int]]
:rtype: bool
"""
m,n=len(matrix),len(matrix[0])
for i in range(n-1):
a=matrix[0][i]
j=1
while j<m and (i+j)<n:
if matrix[j][i+j] != a:
return False
j += 1
for k in range(1,m-1):
b=matrix[k][0]
j=1
while k+j<m and j<n:
if matrix[k+j][j] != b:
return False
j += 1
return True
三、运行结果