程序员面试题精选100题(51)-顺时针打印矩阵[算法]

面试题 时间:2019-09-22 手机网站

由于endXendY可以根据startXstartY以及columnsrows来求得,因此此时我们只需要引入startXstartY两个变量。我们可以想象有一个循环,在每一次循环里我们从(startX, startY)出发按照顺时针打印数字。

接着我们分析这个循环结束的条件。对一个5×5的矩阵而言,最后一圈只有一个数字,对应的坐标为(2, 2)。我们发现5 > 2 * 2。对一个6×6的矩阵而言,最后一圈有四个数字,对应的坐标仍然为(2, 2)。我们发现6 > 2 * 2依然成立。于是我们可以得出,让循环继续的条件是columns > startX * 2 && rows > startY * 2。有了这些分析,我们就可以写出如下的代码:

void PrintMatrixClockwisely(int** numbers, int columns, int rows)

{

        if(numbers == NULL || columns <= 0 || rows <= 0)

                return;

 

        int startX = 0;

        int startY = 0;

 

        while(columns > startX * 2 && rows > startY * 2)

        {

                PrintMatrixInCircle(numbers, columns, rows, startX, startY);