题目:
输入一个矩阵,按照从外圈向内圈顺时针打印数组元素。例如输入二维数组 a[3][3] = {
{1,3,4}, {5,6,7}, {8,2,0}},打印出来的结果应该是:1 3 4 7 0 2 8 5 6
解决思路:
(1)首先,本文实现的顺时针打印,起始位置是矩阵的左上角,即数组的 【0】【0】位置;
(2)一个圈顺时针打印一遍,要分四个方向打印:从左到右、从上到下、从右到左、从下到上;
(3)每一个方向打印完,要有结束位置,且不能有重复位置的打印,比如当前列最大值为3,从左到右打印到【0】【2】时,这个方向已经打印结束。接下来是从上到下的方向,但此时【0】【2】已经打印过了,所以行值要加1,即从【1】【2】开始打印。类似这样,每个方向都要注意这一点;
(4)一圈打印完,去到第二个圈的起始位置时,我们分析发现:当前圈的起始位置就是上一个圈的起始位置的行列都加1;
(5)同时,一圈打印结束,我们当前最外圈的元素已经输出了。为避免重复,我们下一圈的起始位置可以限制下一圈的从右到左和从下向上方向的结束条件;那我们的行值需要减1,列值需要减1,即得到当前圈行、列值得最大值,以此控制另外两个方向的结束条件。
实现代码: