题目:
给定一个含有 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;
}
}
该博客介绍了LeetCode第498题的对角线遍历问题,给出了矩阵中元素的对角线遍历顺序。解答中提到这是一个恶心题,解决思路是依据索引和的奇偶性来确定移动方向。当索引和为奇数时,沿着对角线向右下方移动;为偶数时,沿着对角线向左上方移动。并提供了具体的Java代码实现。
514

被折叠的 条评论
为什么被折叠?



