题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

        由于从外圈到内圈的顺序依次打印,可以把矩阵想象成若干个圈。用一个循环来打印矩阵,每一次打印矩阵中的一个圈。而这个矩阵的行数是rows,列数是columns。而每一圈开始的坐标中行标和列标总是相同的。可以在矩阵中选取左上角为(start,start)的一圈为分析的目标。而循环继续的条件是columns>startX*2并且row>startY*2。

代码实现:

public class Solution{
       public static void printMatrix(int[][] numbers){
              if(numbers==null){
                     return;
              }
              int rows=numbers.length;
              int columns=0;
              if(rows>0){
                    columns=numbers[0].length;
              }
              int start=0;
              //rows>start*2并且columns>start*2 循环
              while(rows>start*2&&columns>start*2){
                    printMatrixInCircle(numbers,columns,rows,start);
                    start++;
              }
       }

       public static 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];
                  System.out.print(number+" ");
             }
             //从上至下打印一列
             if(start<endY){
                  for(int i=start+1;i<=endY;i++){
                        int number=numbers[i][endX];
                        System.out.print(number+" ");
                  }
             }
             //从右至左打印一行
             if(start<endX&&start<endY){
                  for(int i=endX-1;i>=start;i--){
                         int number=numbers[endY][i];
                         System.out.print(number+" ");
                  }
             }
             //从下至上打印一列
             if(start<endX&&start<endY-1){
                   for(int i=endY-1;i>=start+1;i--){
                          int number=numbers[i][start];
                          System.out.print(number+" ");
                   }
             }
       }

       public static void main(String[] args){
             int[][] arr={{1,2,3,4}};
             int[][] arr1={{1},{5},{9},{13}};
             int[][] arr2={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
             int[][] arr3={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
             printMatrix(arr);
             System.out.println();
             printMatrix(arr1);
             System.out.println();
             printMatrix(arr2);
             System.out.println();
             printMatrix(arr3);
       }
 
}

 

 posted on 2018-10-19 21:43  会飞的金鱼  阅读(152)  评论(0)    收藏  举报