题目:从外向里顺时针打印矩阵
做题心得:该题本质上并未考查复杂的数据结构及算法,而是考查了快速找规律的能力!!!
要想作出此题,必须先有绝对清晰的思路,否则越写越乱(因为涉及到很多的循环打印)
自己当时的思路基本符合作者提供的思路:
先考虑怎么打印一圈(四个循环),再考虑如何结束打印(和作者的意图不太一样,自己想通过打印数<=rows*columns来决定,作者的思路比较难想!)
但真正去写还是很困难。。。
参考代码如下:
#include "stdafx.h"void PrintMatrixInCircle(int** numbers, int columns, int rows, int start);void printNumber(int number);void PrintMatrixClockwisely(int** numbers, int columns, int rows){ if(numbers == NULL || columns <= 0 || rows <= 0) return; int start = 0; while(columns > start * 2 && rows > start * 2) { PrintMatrixInCircle(numbers, columns, rows, start); ++start; }}void PrintMatrixInCircle(int** numbers, int columns, int rows, int start){ int endX = columns - 1 - start; int endY = rows - 1 - start; // 从左到右打印一行 for(int i = start; i <= endX; ++i) { int number = numbers[start][i]; printNumber(number); } // 从上到下打印一列 if(start < endY) { for(int i = start + 1; i <= endY; ++i) { int number = numbers[i][endX]; printNumber(number); } } // 从右到左打印一行 if(start < endX && start < endY) { for(int i = endX - 1; i >= start; --i) { int number = numbers[endY][i]; printNumber(number); } } // 从下到上打印一列 if(start < endX && start < endY - 1) { for(int i = endY - 1; i >= start + 1; --i) { int number = numbers[i][start]; printNumber(number); } }}void printNumber(int number){ printf("%d\t", number);}