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