leetcode - 498 对角线遍历

it2022-05-05  145

用时62min

class Solution { public int[] findDiagonalOrder(int[][] matrix) { if(matrix.length == 0) return new int[0]; int row = 0,col = 0,n = matrix.length , m = matrix[0].length; int [] result = new int[n*m]; for(int i=0;i< result.length;i++) { result[i] = matrix[row][col]; if((row+col)%2 == 0) { if(col == m-1) row++; else if(row == 0) col ++; else { row --; col ++; } }else{ if(row == n-1) col++; else if(col == 0) row ++; else { row++; col --; } } } return result; } }

这种题目一般都是有规律的

解这道题的时候有两个地方需要注意 一个是边界情况下如何转向(即row和col的值应该怎么改变)另一个就是如何确定下一个遍历的位置(非边界时) 先看第二个问题,可以发现斜对角线每一个元素的行列索引和是相同的,这启发我们想到用行列索引的奇偶性来判断遍历方向再看第一个问题,可以发现第一行和最后一列需要转向的都是行列索引和为偶数的位置。第一列和最后一行需要转向的位置都是行列索引和为奇数的位置。 总之,在面试的时候画一个4*4矩阵分析一下即可,只去思考不动笔是很难快速发现规律的。

最新回复(0)