498. 对角线遍历
目录
题目链接:
题目:
解题思路:
代码:
题目链接:
498. 对角线遍历 - 力扣(LeetCode)
题目:
解题思路:
解题思路是观察对角线方向交替变化的特点:偶数索引对角线向上遍历(m--,n++),奇数索引向下遍历(m++,n--)。当超出边界时调整指针位置。代码使用双指针m和n遍历矩阵,根据当前方向处理边界情况,将元素按顺序存入结果数组。时间复杂度O(M*N),空间复杂度O(1)。关键在于正确处理方向切换时的指针越界调整。
代码:
class Solution {public static int[] findDiagonalOrder(int[][] matrix) {if (matrix.length == 0) {return new int[0];}int rowLength = matrix.length;int columnLength = matrix[0].length;int[] answer = new int[rowLength * columnLength];int count = rowLength + columnLength - 1;int m = 0;int n = 0;int answerIndex = 0;for (int i = 0; i < count; i++) {if (i % 2 == 0) {while (m >= 0 && n < columnLength) {answer[answerIndex] = matrix[m][n];answerIndex++;m--;n++;}if (n < columnLength) {m++;} else {m = m + 2;n--;}} else {while (m < rowLength && n >= 0) {answer[answerIndex] = matrix[m][n];answerIndex++;m++;n--;}if (m < rowLength) {n++;}else{m--;n=n+2;}}}return answer;}}
总结:
该题目要求在二维矩阵中按对角线顺序遍历元素。解题思路是观察对角线方向交替变化的特点:偶数索引对角线向上遍历(m--,n++),奇数索引向下遍历(m++,n--)。当超出边界时调整指针位置。代码使用双指针m和n遍历矩阵,根据当前方向处理边界情况,将元素按顺序存入结果数组。时间复杂度O(M*N),空间复杂度O(1)。关键在于正确处理方向切换时的指针越界调整。