766. 托普利茨矩阵
题目来源:力扣(LeetCode)https://leetcode-cn.com/problems/toeplitz-matrix/
题目
给你一个 m x n
的矩阵 matrix
。如果这个矩阵是托普利茨矩阵,返回 true
;否则,返回 false
。
如果矩阵上每一条由左上到右下的对角线上的元素都相同,那么这个矩阵是 托普利茨矩阵 。
示例 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]" 上的元素不同。
提示:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 20
0 <= matrix[i][j] <= 99
进阶:
- 如果矩阵存储在磁盘上,并且内存有限,以至于一次最多只能将矩阵的一行加载到内存中,该怎么办?
- 如果矩阵太大,以至于一次只能将不完整的一行加载到内存中,该怎么办?
解题思路
思路:遍历
先审题,题目给定一个 m × n m \times n m×n 的矩阵 m a t r i x matrix matrix,其中:
题目所求
- 判断矩阵 m a t r i x matrix matrix 是否是托普利茨矩阵?若是,返回 T r u e True True,否则返回 F a l s e False False。
托普利茨矩阵:矩阵上每一条由左上到右下的对角线上的元素都相同。
目前根据定义来看,并不是很清晰,我们结合示例 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 。
观察解释部分中罗列出的对角线上的元素,以 [1, 1, 1] 为例对照示例图示,可发现,从做左往右看,存在右下角元素的情况下,每个 1 都与其右下角的元素相等(从右往左看同理),如下图示:
这里以从左往右来说明,即是当存在右下角元素时,当矩阵中每个元素与其右下角的元素相等时,矩阵为托普利茨矩阵。
那么,可以通过遍历矩阵 m a t r i x matrix matrix,判断每个元素与其右下角元素是否相等即可。
具体的代码实现如下。
class Solution:
def isToeplitzMatrix(self, matrix: List[List[int]]) -> bool:
# 矩阵的行数
m = len(matrix)
# 矩阵列数
n = len(matrix[0])
# 遍历矩阵判断每个元素与其右下角元素是否相等
for i in range(m - 1):
for j in range(n - 1):
# 出现不相等,直接返回 False
if matrix[i][j] != matrix[i + 1][j + 1]:
return False
# 遍历结束后,若均相等,返回 True
return True
复杂度分析
- 时间复杂度: O ( m n ) O(mn) O(mn), m m m 为矩阵行数, n n n 为矩阵列数。
- 空间复杂度: O ( 1 ) O(1) O(1)。
欢迎关注
公众号 【书所集录】
如有错误,烦请指出,欢迎指点交流。若觉得写得还不错,麻烦点个赞👍,谢谢。