766. 托普利茨矩阵

地址:

力扣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] 表示该行代表有多少列,这个有点神奇,毕竟矩阵所有列数都是一样的,还要弄成这样

查看更多刷题笔记

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值