题目
给你一个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 。
**输入:**matrix = [[1,2],[2,2]]
**输出:**false
解释:
对角线 “[1, 2]” 上的元素不同。
提示:
- m ==
- n ==
- 1 <= <= 20
- 0 <= <= 99
题解
1 | class Solution: |
复杂度分析
-
时间复杂度:,其中为矩阵的行数,为矩阵的列数。矩阵中每个元素至多被访问两次。
-
空间复杂度:,我们只需要常数的空间保存若干变量。
进阶:
-
如果矩阵存储在磁盘上,并且内存有限,以至于一次最多只能将矩阵的一行加载到内存中,该怎么办?
-
如果矩阵太大,以至于一次只能将不完整的一行加载到内存中,该怎么办?
对于进阶问题一,一次最多只能将矩阵的一行加载到内存中,我们将每一行复制到一个连续数组中,随后在读取下一行时,就与内存中此前保存的数组进行比较。
对于进阶问题二,一次只能将不完整的一行加载到内存中,我们将整个矩阵竖直切分成若干子矩阵,并保证两个相邻的矩阵至少有一列或一行是重合的,然后判断每个子矩阵是否符合要求。