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+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

posted @ 2019-04-21 21:36  程序员小川  阅读(468)  评论(0编辑  收藏  举报