LeetCode算法题-Toeplitz Matrix(Java实现)
这是悦乐书的第312次更新,第333篇原创
01 看题和准备
今天介绍的是LeetCode算法题中Easy级别的第181题(顺位题号是766)。如果从左上角到右下角的每个对角线具有相同的元素,则矩阵是Toeplitz。现在给定一个M×N矩阵,当且仅当矩阵是Toeplitz时返回True。例如:
输入:矩阵= [[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,2],[2,2]]
输出:错误
说明:对角线“[1,2]”具有不同的元素。
注意:
-
矩阵将是一个整数的二维数组。
-
矩阵将具有范围[1,20]中的多个行和列。
-
matrix [i] [j]将是范围[0,99]中的整数。
跟进:
1、如果矩阵存储在磁盘上,并且内存有限,以至于你一次只能将矩阵的最多一行加载到内存中,该怎么办?
2、如果矩阵太大而你只能一次将部分行加载到内存中怎么办?
本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。
02 解题
题目的要求是判断对角线上的值是否都相同,所以我们直接遍历数组,获取当前元素,判断它的右下元素(行和列都加1)是否与其相等,当然也可以判断左上方向,不等于就直接返回false。
另外,题目后面跟了两个问题,针对第一个问题可以使用HashMap或者队列的方式,存一次判断一次;针对第二个问题,根据每次能加载最大行数,将其分解。
public boolean isToeplitzMatrix(int[][] matrix) {
int r = matrix.length;
int c = matrix[0].length;
for (int i=0; i<r; i++) {
for (int j=0; j<c; j++) {
if (i+1<r && j+1<c && matrix[i+1][j+1] != matrix[i][j]) {
return false;
}
}
}
return true;
}
03 小结
算法专题目前已日更超过五个月,算法题文章181+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。
以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!