题目:
给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。
示例:
输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
输出: [1,2,4,7,5,3,6,8,9]
解释:
说明:
- 给定矩阵中的元素总数不会超过 100000 。
解答:
恶心题。思路是根据索引和的奇偶判断。
考虑以下二维数组:
条件:索引和为奇数(蓝色)时,遇到column = 0向下,遇到row = 最大长度时向右,同时遇到向右(左下角),其余情况右下
索引和为偶数(红色)时,遇到row = 0向右,遇到column = 最大长度时向下,同时遇到向下(右上角),其余情况左上。
实现代码如下:
class Solution {
public int[] findDiagonalOrder(int[][] matrix) {
if (matrix == null || matrix.length == 0) {
return new int[0];
}
int rowLength = matrix.length;
int columnLength = matrix[0].length;
int[] result = new int[rowLength * columnLength];
int row = 0;
int column = 0;
for (int i = 0; i < result.length; i++) {
result[i] = matrix[row][column];
if ((row + column) % 2 == 0) {
if (column == columnLength - 1) {
row++;
}
else if (row == 0) {
column++;
}
else {
row--;
column++;
}
}
else {
if (row == rowLength - 1) {
column++;
}
else if (column == 0) {
row++;
}
else {
row++;
column--;
}
}
}
return result;
}
}