Problem description:
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.
解题思路:
从对角线将二维数组分成两部分(右上和左下),首先求解右上的(包括对角线)
注意:数组越界问题:
for(int i = 0; i < matrix[0].length-1;i++){
int k =i;
for(int j = 0; j < matrix.length-1;j++){
if(matrix[j][k] != matrix[j+1][k+1]){
flag = false;
return flag;
}
k ++;
if(k == matrix[0].length-1) break;
}
}
然后求解左下部分,从(1,1)开始
for(int i = 1 ; i<matrix.length-1;i++){
int k = i;
for(int j = 0 ; j < matrix[0].length-1;j++){
if(matrix[k+1][j+1] != matrix[k][j]){
flag = false;
return flag;
}
k++;
if(k == matrix.length-1) break;
}
}
整合起来,整个解题过程:
class Solution {
public boolean isToeplitzMatrix(int[][] matrix) {
boolean flag = true;
for(int i = 0; i < matrix[0].length-1;i++){
int k =i;
for(int j = 0; j < matrix.length-1;j++){
if(matrix[j][k] != matrix[j+1][k+1]){
flag = false;
return flag;
}
k ++;
if(k == matrix[0].length-1) break;
}
}
for(int i = 1 ; i<matrix.length-1;i++){
int k = i;
for(int j = 0 ; j < matrix[0].length-1;j++){
if(matrix[k+1][j+1] != matrix[k][j]){
flag = false;
return flag;
}
k++;
if(k == matrix.length-1) break;
}
}
return flag;
}
}
测试结果: