题目29:顺时针打印数组
题目描述:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
题目分析:
利用图形思考,得出循环条件是columns>start*2并且rows>startY*2
代码实现:
package swordToOffer;
public class Num29_PrintMartixClockwise {
//输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
public static void main(String[] args) {
// TODO Auto-generated method stub
}
public void PrintMatrixClockwisely(int[][] matrix,int columns,int rows) {
if(matrix==null||columns<=0||rows<=0) {
return ;
}
int start = 0;
while(columns>start*2&&rows>start*2) {
PrintMatrixInCircle(matrix,columns,rows,start);
++start;
}
}
public void PrintMatrixInCircle(int[][] matrix,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 = matrix[start][i];
printNumber(number);
}
//从上到下打印一列
if(start<endY) {
for(int i = start+1;i<=endY;++i) {
int number = matrix[i][endX];
printNumber(number);
}
}
//从右到左打印一行
if(start<endX&&start<endY) {
for(int i=endX-1;i>=start;--i) {
int number = matrix[endY][i];
printNumber(number);
}
}
//从下到上打印一列
if(start<endX&&start<endY-1) {
for(int i =endY-1;i>=start+1;--i) {
int number = matrix[i][start];
printNumber(number);
}
}
}
public void printNumber(int a) {
System.out.println(a);
}
}
考点分析:
抽象问题具体化,借助模拟的方法来思考复杂的问题。