本文准备讲解1个算法编程问题, 这个算法编程问题来自LintCode平台。不了解.LintCode平台的读者可以阅读笔者文章(在线编程平台推荐-LeetCode)。问题的英文版本描述如下:
Matrix Zigzag Traversal
Given a matrix of mxn elements (m rows,n columns), return all elements of the matrix in ZigZag-order.
Example
Given a matrix:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10, 11, 12]
]
return [1, 2, 5, 9, 6, 3, 4, 7, 10, 11, 8, 12].
矩阵的之字型遍历
给你一个包含 mxn 个元素的矩阵 (m行,n列), 之字型遍历该矩阵。
样例
对于如下矩阵:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10, 11, 12]
]
返回 [1, 2, 5, 9, 6, 3, 4, 7, 10, 11, 8, 12]。
该问题要求对矩阵元素逐行斜线遍历。以样例矩阵为例,1个斜线遍历为 [ 2,5],另1个斜线遍历为 [9,6,3]。这2个斜线遍历的遍历方向相反。算法处理方案需要将斜线非端点节点和斜线端点节点的处理区别对待。斜线非端点节点为非矩阵边界节点,如样例矩阵的 6。斜线端点节点为矩阵边界节点,如样例矩阵的 2,5,9,3。现在公布1种高效简单的算法方案。