本文已参与「新人创作礼」活动,一起开启掘金创作之路。
题目描述
leetcode 第766题:托普利茨矩阵 给你一个 m x n 的矩阵 matrix 。如果这个矩阵是托普利茨矩阵,返回 true ;否则,返回 false 。 如果矩阵上每一条由左上到右下的对角线上的元素都相同,那么这个矩阵是 托普利茨矩阵 。 示例:
输入: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
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
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] 遍历完成,该矩阵是托普利茨矩阵