j

jaryue

V1

2023/05/13阅读:7主题:默认主题

leetcode 766. 托普利茨矩阵

leetcode 766. 托普利茨矩阵.


题目描述

  1. 托普利茨矩阵

给你一个 m x n 的矩阵 matrix 。如果这个矩阵是托普利茨矩阵,返回 true ;否则,返回 false 。

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

示例 1:

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

输入:matrix = [[1,2],[2,2]] 输出:false 解释: 对角线 "[1, 2]" 上的元素不同。

提示:

m == matrix.length n == matrix[i].length 1 <= m, n <= 20 0 <= matrix[i][j] <= 99

进阶:

如果矩阵存储在磁盘上,并且内存有限,以至于一次最多只能将矩阵的一行加载到内存中,该怎么办? 如果矩阵太大,以至于一次只能将不完整的一行加载到内存中,该怎么办?

解题思路

方法1:模拟+遍历
我们需要判断对角线 的元素是否相同
就是n[i][j]与n[i+1][j+1]是否相同

我们可以使用双循环来遍历数组,

我们只需要遍历第一行与第一列的头元素

其他的使用一个循环判断n[i][j]与n[i++][j++]是否相同,直到数组的边界结束,如果中途出现不相同的返回false,否则返回true

法1

  • 时间复杂度(O(n))
  • 空间复杂度(O(1))

执行结果

法1

我们首先获取矩阵的行数和列数。

然后,我们遍历矩阵中除最后一行和最后一列的所有元素,检查当前元素是否与其右下方的元素相等。

如果存在任何一个元素不满足条件,则返回false;否则,返回true。

func isToeplitzMatrix(matrix [][]int) bool {
    rows := len(matrix)
    cols := len(matrix[0])

    for i := 0; i < rows-1; i++ {
        for j := 0; j < cols-1; j++ {
            if matrix[i][j] != matrix[i+1][j+1] {
                return false
            }
        }
    }

    return true
}

执行结果: 通过 显示详情 查看示例代码 添加备注

执行用时: 8 ms , 在所有 Go 提交中击败了 88.89% 的用户 内存消耗: 4.1 MB , 在所有 Go 提交中击败了 100.00% 的用户 通过测试用例: 483 / 483 炫耀一下:


分类:

后端

标签:

后端

作者介绍

j
jaryue
V1