【遍历】LeetCode 766. 托普利茨矩阵

766. 托普利茨矩阵


题目来源:力扣(LeetCode)https://leetcode-cn.com/problems/toeplitz-matrix/

题目


给你一个 m x n 的矩阵 matrix 。如果这个矩阵是托普利茨矩阵,返回 true ;否则,返回 false

如果矩阵上每一条由左上到右下的对角线上的元素都相同,那么这个矩阵是 托普利茨矩阵

示例 1:

img

输入: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:

img

输入: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 来看下:

图示 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 都与其右下角的元素相等(从右往左看同理),如下图示:

图示 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)

欢迎关注


公众号 【书所集录


如有错误,烦请指出,欢迎指点交流。若觉得写得还不错,麻烦点个赞👍,谢谢。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值