地址:
力扣https://leetcode-cn.com/problems/toeplitz-matrix/
题目:
给你一个 m x n 的矩阵 matrix 。如果这个矩阵是托普利茨矩阵,返回 true ;否则,返回 false 。
如果矩阵上每一条由左上到右下的对角线上的元素都相同,那么这个矩阵是 托普利茨矩阵 。
示例 1:
输入: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 。 |
示例 2:
输入:matrix = [[1,2],[2,2]] 输出:false 解释: 对角线 "[1, 2]" 上的元素不同。 |
提示:
m == matrix.length n == matrix[i].length 1 <= m, n <= 20 0 <= matrix[i][j] <= 99 |
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/toeplitz-matrix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
元素位置 (i,j) 这个值,其右斜下角位置的所有元素须等同于该元素值
以上图示例来看,需要分别对行的每个元素遍历;对列的每个元素遍历
1 2 3 4
5 1 2 3
9 5 1 2
边界条件不用太扣,因为再跑跑不过最大行,最大列,只要在这个范围,我们就可以继续找
bool check(int** matrix, int r, int c, int cur_r, int cur_c)
{
int i = cur_r;
int j = cur_c;
while(1)
{
if(i>=r || j>=c)
break;
if( matrix[i][j] != matrix[cur_r][cur_c] )
return false;
i++;
j++;
}
return true;
}
bool isToeplitzMatrix(int** matrix, int matrixSize, int* matrixColSize){
int r=matrixSize;
int c=matrixColSize[0];
int i,j;
for(i=0; i<r; i++)
{
if(false == check(matrix, r, c, i, 0))
return false;
}
for(j=1; j<c; j++)
{
if(false == check(matrix, r, c, 0, j))
return false;
}
return true;
}
结束语:
二位数组代表的矩阵操作,默认的题目规则是
**matrix | 二维数组 |
matrixSize | 总行数 |
*matrixColSize | 每一行[i] 表示该行代表有多少列,这个有点神奇,毕竟矩阵所有列数都是一样的,还要弄成这样 |