《剑指offer》Java实现

《剑指Offer》Java实现--顺时针打印矩阵

2018-10-12  本文已影响14人  南湖Giser

题目描述

    输入一个矩阵,按照从外向里顺时针的顺序打印出每一个数字。测试用例如下图:


测试数组

思路分析

    这道题目并不难,关键在于边界控制!每一层遍历均从左上角开始,逐层往里完成遍历。

Java代码实现

/**
 * 由外向内顺时针打印矩阵数组
 * @author Administrator
 * @version 2018/10/12
 */
public class Exe31_PrintMatrixClockWisely {

    public static void main(String[] args) {
        int[][] matrix={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16},{21,22,23,24}};
        printMatrixClockWisely(matrix);
    }
    
    public static void printMatrixClockWisely(int[][] matrix) {
        //参数合法性检查
        if(matrix==null||matrix.length!=matrix[0].length){
            throw new IllegalArgumentException();
        }else {
            int dimension=matrix.length;
            int rowStart=0;
            int colStart=0;
            //分解工作,一圈一圈的打印
            while(dimension>rowStart*2&&dimension>colStart*2){
                printCircle(matrix, rowStart, colStart);
                rowStart++;
                colStart++;
            }
        }
    }
    
    private static void printCircle(int[][] matrix,int rowStart,int colStart) {
        int dimension=matrix.length;
        //从左向右打印
        for(int i=colStart;i<dimension-colStart;i++){
            System.out.print(matrix[rowStart][i]+" ");
        }
        //从上往下打印
        for(int i=rowStart+1;i<dimension-rowStart;i++){
            System.out.print(matrix[i][dimension-rowStart-1]+" ");
        }
        //从右往左打印
        for(int i=dimension-colStart-2;i>colStart-1;i--){
            System.out.print(matrix[dimension-rowStart-1][i]+" ");
        }
        //从下往上打印
        for(int i=dimension-rowStart-2;i>rowStart;i--){
            System.out.print(matrix[i][colStart]+" ");
        }
        System.out.println();
    }

}
上一篇下一篇

猜你喜欢

热点阅读