顺时针打印矩阵

来源:互联网 发布:win8网络连接在哪里 编辑:程序博客网 时间:2024/06/06 06:19

题目描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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;    }}
0 0
原创粉丝点击