算法——转圈打印矩阵【高频考点】

【题目】 给定一个整型矩阵matrix,请按照转圈的方式打印它。

例如: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 PrintMatrix {
    public void printMatrix(int[][] matrix){
 //  (tR,tC)  1  2  3  4
          //  5  6  7  8
          //  9  10 11 12
          //  13 14 15 16  (dR,dC)
        int tR = 0 ;
        int tC = 0 ;
        int dR = matrix.length - 1;
        int dC = matrix[0].length - 1;
        while(tR <= dR && tC <= dC)
            //先打印外圈(1、2、3  4、8、12  16、15、14  13、9、5),
            //再打印内圈(6  7  11  10)
            printMatrix(matrix,tR++,tC++,dR--,dC--);
    }

    public void printMatrix(int[][] matrix,int tR,int tC,int dR,int dC){
        //对边界处理
        if(tC == dC)
            for(int i = tR ; i <= dR ;i++)
                System.out.print(matrix[i][tC]+" ");
        else if(tR == dR)
            for(int i = tC ; i <= dC ;i++)
                System.out.print(matrix[tR][i]+" ");
        else{
            int curR = tR;
            int curC = tC;
            while(curC != dC)
                System.out.print(matrix[tR][curC++]+" ");
            while(curR != dR)
                System.out.print(matrix[curR++][dC]+" ");
            while(curC != tC)
                System.out.print(matrix[dR][curC--]+" ");
            while(curR != tR)
                System.out.print(matrix[curR--][tR]+" ");
        }
    }

    @Test
    public void test(){
        int [][] matrix = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
        printMatrix(matrix);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值