题目描述
之字形打印一个矩阵

例如:
1 2 3 45 6 7 89 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到最后一列的时候标志着打印结束
二维数组
二维数组其实是由一维数组组成,比如
1 | int[][] arr = { |
int rows = i.length;//行数int columns = i[0].length;//列数
- length就是行数
- 列数是
具体到其中的一维里面,再求length
代码实现
1 | public class ZigZagPrintMatrix { |
