美文网首页
"之"字形打印矩阵

"之"字形打印矩阵

作者: stoneyang94 | 来源:发表于2018-07-11 21:58 被阅读0次

题目描述

之字形打印一个矩阵

之字形

例如:

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)

分析

思路

两个坐标进行记录,都从0,0点开始。一个往右移动,移动到最右往下移动;另一个往下移动,移动到最下往右移动,两个坐标始终处于一条斜线,然后打印斜线上的元素就行。

做法

宏观调度

设置两个点A(aR,aC),B(bR,bC)(行,列),都从0,0点开始。

  • 宏观
    A向右走,当到最右点的时候(走过了 endC = matrix[0].length-1列),向下走
    B向下走,当到最下点的时候(走过了 endR = matrix.length-1行),向右走
  • 打印方向
    设置一个布尔变量表示从上到下还是从下到上打印
  • 结束
    当aR到最后一行的时候 或者 当bC到最后一列的时候标志着打印结束

二维数组

二维数组其实是由一维数组组成,比如

int[][] arr = {
        {1,2,3,4},
        {4,5,6,8}
      };

int rows = i.length;//行数
int columns = i[0].length;//列数

  • length就是行数
  • 列数是具体到其中的一维里面,再求length

代码实现

public class ZigZagPrintMatrix {
    public static void zigZagPrintMatrix(int[][]matrix){
        if(matrix==null || matrix.length==0 || matrix[0].length==0){
            return ;
        }
        int aR = 0;//行
        int aC = 0;//列
        int bR = 0;//行
        int bC = 0;//列
        int endR = matrix.length-1;//行结束位置,的索引
        int endC = matrix[0].length-1;//列结束位置,的索引
        boolean fromUp = false;
        while(aR != matrix.length){//当aR到最后一行的时候 
            printMatrix(matrix, 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;
            fromUp = !fromUp;
        }
    }

    public static void printMatrix(int[][]matrix,int aR,int aC,
                                int bR,int bC,boolean fromUp){
        if(fromUp){//从右上到左下
            while(aR!= bR+1){//一行一行扫过来
                System.out.print(matrix[aR++][aC--]+" ");
            }
        }else {
            while(bR != aR-1){
                System.out.print(matrix[bR--][bC++]+" ");
            }
        }
    }
    public static void main(String[] args) {
        int matrix[][] = new int[][]{
            {1, 2, 3,  4},
            {5, 6, 7,  8},
            {9, 10,11, 12},
            {13,14,15, 16}
        };
        zigZagPrintMatrix(matrix);
    }
}
输出

相关文章

  • 矩阵

    题一:顺时针转圈打印矩阵 题二:“之“字形打印矩阵"之"字形打印矩阵两个指针:(sr,sc)先从第一行往右移动,到...

  • "之"字形打印矩阵

    题目描述 之字形打印一个矩阵 例如: 1 2 3 45 6 7 89 10 11 12 打印结果是1, 2,5,...

  • Array

    转圈打印矩阵 将正方形矩阵顺时针转动90° 思路:外层遍历交换,之后由外层向内层调整,继续遍历交换 "之"字形打印...

  • 之字形打印举证

    题目:给定一个矩阵matrix, 按照“之” 字形的方式打印这个矩阵, 例如:1 2 3 45 6 7 89 10...

  • 栈、队列、矩阵、链表问题(二)

    目录 “之”字形打印 在行列都排好序的矩阵中找数 打印两个有序链表的公共部分 判断一个链表是否为回文结构 将单向链...

  • 打印螺旋矩阵

    题目要求 打印矩阵 打印矩阵 打印题目要求的矩阵(当N=6时)

  • 之形打印矩阵

    题目: 思路: 还是整体看,从最左上角开始定义两个点a,b,每打印一轮就把a的列数+1,b的行数+1,具体操作如下...

  • 算法入门(四)

    一、矩阵题目练习 (1)转圈打印矩阵 题目:给定一个整型矩阵matrix,请按照转圈的方式打印它 例如:1 2 3...

  • swift 打印回字形

    下图是输入 n = 9时输出的回字形效果图 想法 输出是正方形,N行N列,而且数字是从外圈到里圈递增加1。 以一圈...

  • 数组和矩阵

    转圈打印矩阵[题目]给定一个整型矩阵matrix,请按照转圈的方式打印它例如:1 2 3 45 6 7 ...

网友评论

      本文标题:"之"字形打印矩阵

      本文链接:https://www.haomeiwen.com/subject/ixncpftx.html