problem describe:
如果一个矩阵的每一方向由左上到右下的对角线上具有相同元素,那么这个矩阵是托普利茨矩阵。
给定一个 M x N 的矩阵,当且仅当它是托普利茨矩阵时返回 True。
说明:
matrix 是一个包含整数的二维数组。
matrix 的行数和列数均在 [1, 20]范围内。
matrix[i][j] 包含的整数在 [0, 99]范围内
解法:依次检查每一个对角线的数是否相等。
要检查所有的对角线,就从第一行和第一列依次检查所有的对角线值是否值相等
solution:
class Solution {
public:
bool isToeplitzMatrix(vector<vector<int>>& matrix) {
int m =matrix.size();
int n =matrix[0].size();
if(n==m&&m==1) return true;
for(int i=0;i<n;i++)//检查第一行
{
int count1=0;
int temp=matrix[0][i];
while((count1+i)<n&&count1<m)
{
if(matrix[count1][count1+i]==temp)
count1++;
else
return false;
}
}
for(int i=0;i<m;i++)//检查第一列
{
int count2=0;
int temp =matrix[i][0];
while(count2<n&&(count2+i)<m)
{
if(matrix[count2+i][count2]==temp)
count2++;
else
return false;
}
}
return true;
}
};
解法二:遍历一遍矩阵,看左上角的元素是否等于自己,若有不相等的,则此矩阵不是托普利茨矩阵
solution:
class Solution {
public:
bool isToeplitzMatrix(vector<vector<int>>& matrix) {
int r =matrix.size();
int c =matrix[0].size();
//check the top left
for(int i=0;i<r;i++)
for(int j=0;j<c;j++)
{
if(i>0&&j>0&&matrix[i-1][j-1]!=matrix[i][j])
return false;
}
return true;
}
};