1、递推每条对角线,从上至下isTm+ptr为列坐标总从0开始,行坐标ptr同;从左至右ptr行坐标,isTn+ptr列坐标。
2、注意1*n n*1也是。。。
class Solution {
public:
bool isToeplitzMatrix(vector<vector<int>>& matrix) {
int m = matrix.size();
int n = matrix[0].size();
int isTm = 0, isTn = 0;
if(m == 1)
isTm = 1;
if(n == 1)
isTn = 1;
if(isTm | isTn)
return true;
while(isTm < m-1){
int ptr = 0;
while(ptr < n-1 && isTm+ptr < m-1){
if(matrix[isTm+ptr][ptr] != matrix[isTm+ptr+1][ptr+1]){
return false;
}
ptr++;
}
isTm++;
}
while(isTn < n-1){
int ptr = 0;
while(ptr < m-1 && isTn+ptr < n-1){
if(matrix[ptr][isTn+ptr] != matrix[ptr+1][isTn+ptr+1]){
return false;
}
ptr++;
}
isTn++;
}
return true;
}
};
另一种思想是,错位数组
class Solution {
public:
bool isToeplitzMatrix(vector<vector<int>>& matrix) {
for(int i = 1; i < matrix.size(); i++){
vector<int> tmp1(matrix[i-1].begin(), matrix[i-1].end()-1);
vector<int> tmp2(matrix[i].begin()+1, matrix[i].end());
if(tmp1 != tmp2)
return false;
}
return true;
}
};