题目

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.

思路

  1. 查看左神的资料,栈、队列里面的数组设计宏观结构的思路
  2. 主要就是先打印外圈的内容,然后左上角和右下角的左表向内缩进一位,然后打印里面的数据
  3. 循环结束的条件是:左上角的的行号大于右下角的行号,左下角的列号大于右下角的列号

代码

import java.util.ArrayList;
public class Solution {
   
    public ArrayList<Integer> printMatrix(int [][] matrix) {
       ArrayList<Integer> resultlist = new ArrayList<>();
        int zR =0;
        int zC =0;
        int yR =matrix.length-1;
        int yC =matrix[0].length-1;
        while(zR<=yR && zC<=yC){
            resultlist= printEdge(matrix,zR,zC,yR,yC);
            zR++;
            zC++;
            yR--;
            yC--;
        }
        return resultlist;
    }
    ArrayList<Integer> templist = new ArrayList<>();
    public ArrayList<Integer> printEdge(int[][] matrix,int zR,int zC,int yR,int yC ){
        
        if(zR==yR){
            for(int i=zC;i<=yC;i++){
                templist.add(matrix[zR][i]);
            }
        }else if(zC==yC){
            for(int i=zR;i<=yR;i++){
                templist.add(matrix[i][zC]);
            }
        }else{
            int curR = zR;
            int curC = zC;
            while(curC!=yC){
                templist.add(matrix[zR][curC]);
                curC++;
            }
            while(curR!=yR){
                templist.add(matrix[curR][yC]);
                curR++;
            }
            while(curC!=zC){
                templist.add(matrix[yR][curC]);
                curC--;
            }
            while(curR!=zR){
                templist.add(matrix[curR][zC]);
                curR--;
            }
        }
        return templist;
    }
}