面试题29:顺时针打印矩阵

本秂侑毒 提交于 2020-03-26 08:44:18

 

 

/** * @Author: Allen * @Version:v1.00 * @CreateData:2018年4月2日 上午9:31:45 *输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字, *例如,如果输入如下矩阵:  *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. */import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printMatrix(int [][] matrix) {
        if(matrix==null){
            return null;
        }
        
        ArrayList<Integer> list=new ArrayList<Integer>();
        int rows = matrix.length;
        int colums = matrix[0].length;
        int start=0;
        while(colums>start*2 && rows > start*2){
            list.addAll(printMatrixInCircle(matrix,rows,colums,start));
            start++;
        }
        return list;
    }
    
    private ArrayList<Integer> printMatrixInCircle(int [][] matrix,int rows, int colums,int start){
        ArrayList<Integer> list = new ArrayList<Integer>();
        int endX=colums-start-1;
        int endY=rows-start-1;
        
        //1.从左向右打印一行
        for(int i=start; i<=endX; i++){
            Integer num=matrix[start][i];
            list.add(num);
        }
        //2.从上到下打印一列
        if(endY>start){
            for(int i=start+1; i<=endY; i++){
                Integer num = matrix[i][endX];
                list.add(num);
            }
        }
        //3.从右到左打印一行
        if(endY>start && endX>start){
            for(int i=endX-1; i>=start; i--){
                Integer num = matrix[endY][i];
                list.add(num);
            }
        }
        //4.从下到上打印一列
        if(endY-1>start && endX>start){
            for(int i=endY-1; i > start; i--){
                Integer num = matrix[i][start];
                list.add(num);
            }
        }
        return list;
    }
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!