问题描述:
给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。
示例:
输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] 输出: [1,2,4,7,5,3,6,8,9] 解释:
基本思路:
本题是一个很好的例子,因为它引入了一种完全不同的遍历方式。我们将会看到如何编写这种非常规的遍历。
首先要明确一个思路,由于索引都是非负整数,而且本题中这种遍历的方式非常有规律,我们完全可以抛弃模拟的思想,转而去寻找遍历的元素索引的规律。
我们发现其实所谓对角线遍历可以分为两种——一种是从左下到右上的,另一种是从右上到左下的。
要实现这两种遍历特别简单,xy两个索引,一个+1,一个-1即可。那么何时选择哪一种遍历呢?
假设我们的matrix无限大,那么我们的遍历次序就有:
0: (00)
1: (01)(10)
2: (20)(11)(02)
3: (03)(12)(21)(30)
4: (40)(31)(22)(13)(04)
5: (05)(14)(23)(32)(41)(50)
6: (60)(51)................(06)