顺时针打印矩阵

题目:

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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;
        int rows = matrix.length;
        if(rows <= 0)
            return null;
        int columns = matrix[0].length;
        
        ArrayList<Integer> ret = new ArrayList<Integer>();
        int start = 0;
        while(rows > start * 2 && columns > start * 2) {
            per(ret, matrix, rows, columns, start);
            start ++;
        }
        return ret;
    }
    
    public void per(ArrayList<Integer> list, int[][] matrix, int rows, int columns, int start) {
        int endR = columns - start - 1;
        int endC = rows - start - 1;
        
        //打印上面一行
        for(int i=start; i<=endR; i++) {
            list.add(matrix[start][i]);
        }
        
        //打印右边一列
        if(start < endC)
            for(int i=start+1; i<=endC; i++) {
                list.add(matrix[i][endR]);
            }
    
        //打印下面一行
        if(start < endR && start < endC)
            for(int i=endR-1; i>=start; i--) {
                   list.add(matrix[endC][i]);
            }
        
        //打印左边一列
        if(start < endR && start < endC - 1)
            for(int i=endC-1; i>=start+1; i--) {
                list.add(matrix[i][start]);
            }
    }
}
原文地址:https://www.cnblogs.com/wxisme/p/5320037.html