jaryue
2023/05/13阅读:7主题:默认主题
leetcode 766. 托普利茨矩阵
题目描述
-
托普利茨矩阵
给你一个 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 炫耀一下:
作者介绍