顺时针打印矩阵

题目

分析

顺时针打印矩阵

代码

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printMatrix(int [][] matrix) {
        ArrayList<Integer> list = new ArrayList<>();
        if(matrix==null||matrix.length<=0||matrix[0].length<=0){
            return list;
        }
        int rows=matrix.length;
        int cols=matrix[0].length;
        int index=0;
        while (2*index<rows&&2*index<cols){
            add(matrix,index,list);
            index++;
        }
        return list;
    }
    public void add(int[][] matrix,int index,ArrayList<Integer> result){
        int rows=matrix.length;
        int cols=matrix[0].length;
        int endx=cols-1-index;
        int endy=rows-1-index;
        //从左到右
        for(int i=index;i<=endx;i++){
            result.add(matrix[index][i]);
        }
        //从上到下
        if(index<endy){//到了右上角之后,大于两行才能从上到下
            for(int i=index+1;i<=endy;i++){
                result.add(matrix[i][endx]);
            }
        }
        //从右到左
        if(index<endx&&index<endy){//到了右下角后只有>=两行,>=两列才能从右到左。
            for(int i=endx-1;i>=index;i--){
                result.add(matrix[endy][i]);
            }
        }
        //从下到上
        if(index<endx&&index<endy-1){//到了左下角后只有>=三行,>=两列才能从下到上。
            for(int i=endy-1;i>index;i--){
                result.add(matrix[i][index]);
            }
        }
    }
}
posted @ 2018-04-02 22:11  baixiaoshuai  阅读(78)  评论(0编辑  收藏  举报