LeetCode 766. Toeplitz Matrix
题目:
A matrix is Toeplitz if every diagonal from top-left to bottom-right has the same element.
Now given an M x N
matrix, return True
if and only if the matrix is Toeplitz.
Example 1:
Input: matrix = [[1,2,3,4],[5,1,2,3],[9,5,1,2]] Output: True Explanation: 1234 5123 9512 In the above grid, the diagonals are "[9]", "[5, 5]", "[1, 1, 1]", "[2, 2, 2]", "[3, 3]", "[4]", and in each diagonal all elements are the same, so the answer is True.
Example 2:
Input: matrix = [[1,2],[2,2]]
Output: False
Explanation:
The diagonal "[1, 2]" has different elements.
Note:
matrix
will be a 2D array of integers.matrix
will have a number of rows and columns in range[1, 20]
.matrix[i][j]
will be integers in range[0, 99]
.
分析:
矩阵,可以归结到多维数组来进行分析。
考察多维数组操作。 但是不明白为什么限定元素边界为0-99.
在循环体中,需要注意return continue和break的区别:
return直接从函数中返回;
continue终止当前循环,从下一次循环开始执行;
break从循环中跳出。
第一次提交:
class Solution { public boolean isToeplitzMatrix(int[][] matrix) { int m,n; m = matrix.length; n = matrix[0].length; //int i =0; for(int j=0; j<n; j++) { int k=0,l=j; while(k+1<m&& l+1<n) { if(matrix[k][l] == matrix[k+1][l+1]) { continue; } else { return false; } } }// upper //int j =0; for(int i=0; i<m; i++) { int k=i,l=0; while(k+1<m && l+1<n) { if(matrix[k][l] == matrix[k+1][l+1]) { continue; } else { return false; } } }// upper return true; /*matrix00 m11 m22 m01 m12 m23 m13 m23, */ } }
结果:
Run Code Status: Time Limit Exceeded Run Code Result: Your input [[1,2,3,4],[5,1,2,3],[9,5,1,2]] Your answer Expected answer true Runtime: N/A
分析:
看来n的平方阶的算法不可行。
但m*n的时间复杂度看来是必须的,因为至少要遍历一遍矩阵,才能确定。
一个未完成的中间版本,原本打算使用一维数组代替二维数组,但后来发现没有本质区别。
class Solution { public boolean isToeplitzMatrix(int[][] matrix) { int m = matrix.length; int n = matrix[0].length; int[] array = new int[m*n]; /*for(int i=0; i<400; i++) { array[i] = -1; }*/ for(int i=0; i<m; i++) { for(int j = 0; j<n; j++) { array[i*n+j] = matrix[i][j]; } } //int /*for(int i=0; i<400;i++) { if(array[i] != -1) { continue; } else { } }*/ /* 1 3 5, 4 1 3, 2 4 1, */ } }
查看了hint, 找到了解题关键: 每一个元素的特征:与左上角的元素相同。
class Solution { public boolean isToeplitzMatrix(int[][] matrix) { int m= matrix.length; int n= matrix[0].length; for(int i=0; i<m; i++){ for(int j=0; j<n; j++) { if((0<i-1 && i-1<m)&&(0<j-1 && j-1<n)) { if(matrix[i-1][j-1] != matrix[i][j]) { return false; } } } } return true; } }
结果:
Submission Result: Wrong Answer Input: [[1,2],[2,2]] Output: true Expected: false
修改后再次提交:
class Solution { public boolean isToeplitzMatrix(int[][] matrix) { int m= matrix.length; int n= matrix[0].length; for(int i=0; i<m; i++){ for(int j=0; j<n; j++) { if(((0<=i-1) && (i-1<m))&&((0<=j-1) && (j-1<n))) { if(matrix[i-1][j-1] != matrix[i][j]) { return false; } } } } return true; } }
结果:
Submission Result: Accepted
分析:
这道题找到正确思路前看了一下提示。之前没有找到正确的思路。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?