顺时针打印矩阵

题目描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7

8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.

将矩阵看成是一个一个的圈,开始打印最外层圈,然后打印次外层圈,一直打印完。接着讨论如何打印圈,先打

印横排,然后打印右列,接着打印底排,最后打印左列,这样就可以实现矩阵的顺时针打印。

public class Solution {
    public ArrayList<Integer> printMatrix(int [][] matrix) {
       if(matrix==null||matrix.length<=0||matrix[0].length<=0){
            return null;
        }
        int row=matrix.length;
        int column=matrix[0].length;
        ArrayList<Integer> list=new ArrayList<Integer>();
        int count=row>column?(column+1)/2:(row+1)/2;
        for(int i=0;i<count;i++){
            int start1=i,end1=column-i-1;
            //打印横排
            for(int j=start1;j<=end1;j++){
                list.add(matrix[start1][j]);
            }
            
            //打印右列
            int line=column-i-1;
            int start2=i+1,end2=row-i-1;
            if(start2<=end2){
                for(int j=start2;j<=end2;j++){
                    list.add(matrix[j][line]);
                }
            }
            
            //打印下横排
            int horiz=row-i-1;
            int start3=column-i-1-1,end3=i;
            if(start3>=end3&&horiz!=i){
                for(int j=start3;j>=end3;j--){
                    list.add(matrix[horiz][j]);
                }
            }
            
            //打印左竖排
            line=i;
            int start4=row-i-1-1,end4=i+1;
            if(start4>=end4&&line!=(column-i-1)){
                for(int j=start4;j>=end4;j--){
                    list.add(matrix[j][line]);
                }
            }
            
        }
        return list;
    }
}
posted @ 2016-02-13 14:43  黄大仙爱编程  阅读(146)  评论(0编辑  收藏  举报