19.顺时针打印矩阵

题目描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 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 {
    ArrayList<Integer> res=new ArrayList<>();
    public ArrayList<Integer> printMatrix(int [][] matrix) {
        int rows=matrix.length;
        int columns=matrix[0].length;
        if(matrix==null || columns<=0 || rows<=0){
            return null;
        }
        
        int start=0;
        while(rows>start*2 && columns>start*2){
            printMatrixInCircle(matrix,columns,rows,start);
            start++;
        }
        return res;
    }
    
    private 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++){
            res.add(matrix[start][i]);
        }
        
        //从上往下打印列
        if(start<endY){
            for(int i=start+1;i<=endY;i++){
                res.add(matrix[i][endX]);
            }
        }
        
        //从右到左打印行
        if(start<endX && start<endY){
            for(int i=endX-1;i>=start;--i){
                res.add(matrix[endY][i]);
            }
        }
        
        //从下往上打印列
        if(start<endX && start<endY-1){
            for(int i=endY-1;i>=start+1;--i){
                res.add(matrix[i][start]);
            }
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/chanaichao/p/10158717.html