数组 - 29.顺时针打印矩阵
思路:
这道题看似很简单实际上数组最头疼的就是边界问题,这道题目体现的淋漓尽致。
顺时针打印,那么我们就根据四个方向去打印即可,关键是怎么控值打印的边界问题,以及怎么控值那些方向该打打印,那些方向不该打印。
我们定义四个变量辅助我们去顺时针打印。
left:左边界
right:右边界
top:上边界
end:下边界
如图所示,我们把数组分成了4个方向的箭头去打印。
第一步:从左到右的打印
也就是 left -》 right;
此时一行全部打印完毕。
第二步:从上到下打印
因为在第一步从左到右的打印已经把第一行的最后一列打印了,所以从上到下就要舍去这个值。
上边界的下一个开始一直到下边界,所以打印的范围为 top-1 -》 end;
第三步:从右到左的打印
首先要进行判断此时它的行数是否就大于1呢,如果行数已经是1了,那么就没有必要再去从右向左的打印了。
由于我们定义了上边界和下边界,只要二者不相等,那么就证明此时不止一行,那么就从右到左的打印。
由于第二步已经把下边界的最后一个值给打印了,所以我们舍弃这个值,从这个值之前开始打印。打印的范围就是 right-1 -》 left
第四步:从下向上打印
首先也要进行判断,如果说当前是一列,那么就证明第二步已经完成打印了,就不需要再去从下向上的打印了。
所以我们要判断当前的左右边界是否为一列。
如果是一列,就不需要打印,不是,那就从下边界的上一个值,打印道上边界的下一个值。打印范围:end-1 -》 top+1;
以上四部就构成了一个循环,最外圈就打印完毕了。
那么我们要向内推进,我们就需要改变左右上下的边界,左边界+1,有边界-1,上边界+1,下边界-1.
只要当前的的left<=right 并且 top <= end,那就接着执行循环。