第九题:“之”字形打印矩阵

版权声明:Please make the source marked https://blog.csdn.net/qq_31807385/article/details/86187670

题目要求:

1 2 3 4
5 6 7 8
9 10 11 12

打印之后的结果为:

1,2,5,9,6,3,4,7,10,11,8,12

代码实现与分析:

和我们以往的矩阵题目一样,如果我们总是局限于如果变化下标来处理逻辑的话,边界控制可能写着写着就凉凉了。所以我么需要从较为宏观的角度去思考这类问题。

package com.isea.brush;

/**
 * 之字形打印矩阵
 * 思路:指定两个点,A和B,AB两个点均从矩阵的左上角出发,A一直往右走,一次移动一步,
 * 移动到最右边之后,向下移动;B点一直往下走,走到最低端之后,往右走,一次移动一步,
 * A点和B点是解耦的,直到最后两个点相遇
 * A点和B点各自往下走一步之后,就会形成一个对角线,我们打印这个对角线即可
 */
public class ZigZag {
    /**
     * a点:(aR,aC)
     * b点:(bR,bC)
     * @param metric
     */
    public static void printZigZag(int[][] metric){
        int aR = 0;
        int aC = 0;
        int bR = 0;
        int bC = 0;

        // 终止的行和终止的列
        int endR = metric.length - 1;
        int endC = metric[0].length - 1;

        boolean fromUp = false;
        while(aR != endR + 1){
            printZigZag(metric,aR,aC,bR,bC,fromUp);
/*            aR = aC == endC ? aR + 1 : aR ;
            aC = aC == endC ? aC  : aC + 1;
            bC = bR == endR ? bC + 1 : bC ;
            bR = bR == endR ? bR  : bR + 1;*/

            aR = aC != endC ? aR : aR + 1 ;
            aC = aC != endC ? aC + 1  : aC ;
            bC = bR != endR ? bC : bC  + 1;
            bR = bR != endR ? bR + 1  : bR;

            fromUp = !fromUp;
        }

    }

    private static void printZigZag(int[][] metric, int aR, int aC, int bR, int bC, boolean fromUp) {
        if (fromUp){
            while(aR != bR + 1){
                System.out.print(metric[aR ++][aC --] + " ");
            }
        }else {
            while(bR != aR - 1){
                System.out.print(metric[bR --][bC ++] + " ");
            }
        }
    }

    public static void main(String[] args){
        int[][] metric = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
        for (int i = 0; i < metric.length; i++) {
            for (int j = 0; j < metric[i].length; j++) {
                System.out.print(metric[i][j] + " ");
            }
            System.out.println();
        }
        printZigZag(metric);
    }
    /**
     * 1 2 3 4
     * 5 6 7 8
     * 9 10 11 12
     * 1 2 5 9 6 3 4 7 10 11 8 12 
     */
}

猜你喜欢

转载自blog.csdn.net/qq_31807385/article/details/86187670