Leetcode 托普利茨矩阵

WechatIMG503.jpeg

题目描述

leetcode 第766题:托普利茨矩阵
给你一个 m x n 的矩阵 matrix 。如果这个矩阵是托普利茨矩阵,返回 true ;否则,返回 false 。
如果矩阵上每一条由左上到右下的对角线上的元素都相同,那么这个矩阵是 托普利茨矩阵 。
示例:
ex1.jpg

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

解题方法

遍历
原址题解

  • 解题思路

定义m,n分别存储矩阵matrix的行数和列数
在[0,m-1)区间遍历matrix
判断当前行去掉最后一个元素和下一行去掉第一个元素是否相等,不等返回false
遍历完成后,返回true

  • 复杂度

时间复杂度:O(m-1),m为矩阵matrix的行数。
空间复杂度:O(1)

  • 代码实现

python3

1
2
3
4
5
6
7
8
class Solution:
def isToeplitzMatrix(self, matrix: List[List[int]]) -> bool:
m,n = len(matrix),len(matrix[0])
if m == 1: return True
for i in range(m-1):
if matrix[i][:(n-1)] != matrix[i+1][1:]:
return False
return True

php

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
function isToeplitzMatrix($matrix) {
$m = count($matrix);
$n = count($matrix[0]);
if($m==0) return true;
for($i=0;$i<$m-1;$i++){
if(array_slice($matrix[$i],0,$n-1)!=array_slice($matrix[$i+1],1)){
return false;
}
}
return true;
}
}
  • 文字草稿

matrix = [[1,2,3,4],[5,1,2,3],[9,5,1,2]]
第1次遍历,第1行去掉最后一个元素:[1,2,3],第2行去掉第一个元素:[1,2,3]
第2次遍历,第2行去掉最后一个元素:[5,1,2],第3行去掉第一个元素:[5,1,2]
遍历完成,该矩阵是托普利茨矩阵

-------------本文结束感谢您的阅读-------------
0%