我是靠谱客的博主 调皮便当,最近开发中收集的这篇文章主要介绍算法-“之”字形打印矩阵,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目

给定一个矩阵matrix,按照“之”字形的方式打印这个矩阵,要求额外空间复杂度为O(1)。
例如: 1,2,3,4,5,6,7,8,9,10,11,12
“之”字形打印的结果为:1,2,5,9,6,3,4,7,10,11,8,12

思路
基本题意为按照当前图示打印矩阵
在这里插入图片描述
我们只需要确定对角线的顶点即可,假设对角线左下角为(a,b),右上角为(c,d),从左上角顶点(0,0)开始两个点同时移动,(a,b)开始向下移动(a++),遇到下边界endRow之后向右移动(b++);(c,d)开始向右移动(d++),遇到右边界之后向下移动(c++),当两点重合时即结束。
在这里插入图片描述
代码

/**
 * “之”字形打印矩阵
 * 【题目】 给定一个矩阵matrix,按照“之”字形的方式打印这个矩阵
 * 例如: 1 2 3 4 5 6 7 8 9 10 11 12 “之”字形打印的结果为:1,2,5,9,6,3,4,7,10,11,8,12
 * 【要求】 额外空间复杂度为O(1)。
 *
 * @Author: FangJu
 * @Date: 2019/8/11
 */
public class ZigZagPrintMatrix {

    public static void main(String[] args) {
        int[][] matrix = {
                {1, 2, 3, 4},
                {5, 6, 7, 8},
                {9, 10, 11, 12},
                {13, 14, 15, 16}
        };
        printMatrixZigZag(matrix);
    }

    /**
     * 打印“之”字形打印矩阵
     *
     * @param matrix 矩阵
     */
    private static void printMatrixZigZag(int[][] matrix) {
        int a = 0;
        int b = 0;
        int c = 0;
        int d = 0;
        int endRow = matrix.length - 1;
        int endCol = matrix[0].length - 1;
        boolean fromUp = true;
        while (b <= endCol) {
            printLevel(matrix, a, b, c, d, fromUp);
            b = (a == endRow) ? b + 1 : b;
            a = (a == endRow) ? a : a + 1;
            c = (d == endCol) ? c + 1 : c;
            d = (d == endCol) ? d : d + 1;
            fromUp = !fromUp;
        }
    }

    /**
     * 打印矩阵对角线
     *
     * @param matrix 矩阵
     * @param a      矩阵左下角行
     * @param b      矩阵左下角列
     * @param c      矩阵右上角行
     * @param d      矩阵右上角列
     * @param flag   从上至下/从下至上(true/false)
     */
    private static void printLevel(int[][] matrix, int a, int b, int c, int d, boolean flag) {
        if (flag) {
            while (c <= a && d >= b) {
                System.out.print(matrix[c++][d--] + "t");
            }
        } else {
            while (a >= c && b <= d) {
                System.out.print(matrix[a--][b++] + "t");
            }
        }
    }

}

最后

以上就是调皮便当为你收集整理的算法-“之”字形打印矩阵的全部内容,希望文章能够帮你解决算法-“之”字形打印矩阵所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部