C语言中按顺时针打印矩阵元素

本文介绍了解决剑指offer中矩阵顺时针螺旋打印问题的思路,涉及行列转换和数组表示法。作者通过代码示例详细解释了从左到右的打印过程,并强调了理解矩阵概念的重要性。

在看完帅地剑指offer的题后,我有些想法想和大家分享(代码是根据帅地的思路写的,如果你想要更深入了解可以去b站看他的视频,题目在剑指offer合集的p29)

先给出一下例题:

给定一个m x n大小的整数矩阵(m行,n列),按顺时针螺旋的顺序打印矩阵中的所有元素。

例如一个3 x 3 的 矩阵:

1 2 3

4 5 6

7 8 9

输出应为:

1 2 3 6 9 8 7 4 5

数据规模

1 <= n,m <= 10 ,矩阵中任意元素都满足 |val|<=100

输入样例1

3 3
1 2 3
4 5 6
7 8 9

输出样例1

1 2 3 6 9 8 7 4 

 首先观察打印的规律,我们可以发现这种打印是分为从左到右,从上到下,从右到左,从下到上的四个顺序为一组,而后的打印则为四个打印的循环。这时候我们可以构建框架:四个循环加一个大循环,然后中间要有判停条件。为了打印出具体的元素,我们需要知道元素在数组中的下标,我们不妨联想到学习线性代数时对矩阵中的元素的下标,也就是aij(i是行,j是列)。此外,我们还需把第一行和最后一行以及最左最右列作为变量声明出来使用。我们定义变量t(top第一行)=0,b(bottom)=m-1,l(left)=0,r(right)=n-1。

接下来进行打印部分的思路分析

1.从左到右

 

++t指的是打印之后t会自增,然后再和b(最后一行)进行判断,从而实现判停。

之所以要t自增,是因为再进行一组循环之后,下一组循环开始的行数是在前一个循环的开始行数的下一行。

2.余下的与1.相同,这里我直接放出代码 

 好好理解从左到右那一部分,接下的都迎刃而解了。

在此,我给出题目最终的完整代码供大家参考

在这道题里面,最值得我们学习的就是如何从数组的角度看矩阵,所以我们需要着重理解被调用函数里面对矩阵的打印中涉及的行列转换和表示思想。

最后,谢谢大家的观看,如果你有更好的看法可以写在评论区,然后大家一起交流互动,感恩蓝天白云。 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值