leetcode-766. 托普利茨矩阵

一、问题描述

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

给定一个 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]" 上有不同的元素。

注意:

  1.  matrix (矩阵)是一个包含整数的二维数组。
  2. matrix 的行数和列数均在 [1, 20]范围内。
  3. 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

三、运行结果


猜你喜欢

转载自blog.csdn.net/GrinAndBearIt/article/details/80502426