題目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);
}
}
考點分析:
抽象問題具體化,藉助模擬的方法來思考複雜的問題。