剑指offer:顺时针打印矩阵

Posted blzm742624643

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer:顺时针打印矩阵相关的知识,希望对你有一定的参考价值。

一、题目描述

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

 

二、代码

public class Solution {
    public ArrayList<Integer> printMatrix(int [][] matrix) {
       ArrayList<Integer> res = new ArrayList<>();
        if(matrix.length==0||matrix[0].length==0){
            return res;
        }
        int sR = 0;
        int sC = 0;
        int eR = matrix.length-1;
        int eC = matrix[0].length-1;
        
        while(sR<=eR&&sC<=eC){
            printEdge(matrix, sR++, sC++, eR--, eC--, res);
        }
        return res;
    }
    
    //打印一圈
    public static void printEdge(int[][] matrix,int sR,int sC,int eR,int eC,ArrayList<Integer> res){
        if(sR==eR){
            for(int i=sC;i<=eC;i++){
                res.add(matrix[sR][i]);
            }
        }else if(sC==eC){
            for(int i=sR;i<=eR;i++){
                res.add(matrix[i][sC]);
            }
        }else{
            int curSR = sR;
            int curSC = sC;
            
            //向右
            while(curSC!=eC){
                res.add(matrix[sR][curSC]);
                curSC++;
            }
            
            //向下
            while(curSR!=eR){
                res.add(matrix[curSR][eC]);
                curSR++;
            }
            
            //向左
            while(curSC!=sC){
                res.add(matrix[eR][curSC]);
                curSC--;
            }
            
            //向上
            while(curSR!=sR){
                res.add(matrix[curSR][sC]);
                curSR--;
            }
        }
            
    }
}

 

  

以上是关于剑指offer:顺时针打印矩阵的主要内容,如果未能解决你的问题,请参考以下文章

剑指 Offer 29. 顺时针打印矩阵 的 详细题解

剑指offer面试题 29. 顺时针打印矩阵

剑指offer面试题 29. 顺时针打印矩阵

剑指offer:顺时针打印矩阵

剑指offer 19.顺时针打印矩阵

Java 剑指offer(29) 顺时针打印矩阵