[leetcode498]对角线遍历 Java 问题解决
最编程
2024-06-01 19:54:41
...
【leetcode分类下所有的题解均为作者本人经过权衡后挑选出的题解,在易读和可维护性上有优势
每题只有一个答案,避免掉了太繁琐的以及不实用的方案,所以不一定是最优解】
给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。
示例:
输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
输出: [1,2,4,7,5,3,6,8,9]
说明:
给定矩阵中的元素总数不会超过 100000 。
class Solution {
public int[] findDiagonalOrder(int[][] matrix) {
if(matrix.length == 0 || matrix == null) return new int[0];
int m = matrix.length, n = matrix[0].length;
int[] res = new int[m * n];
int row = 0, col = 0, d = 0;
int[][] dirs = {{-1,1},{1,-1}};
for(int i = 0; i < m * n; i++)
{
res[i] = matrix[row][col];
row += dirs[d][0];
col += dirs[d][1];
if(row >= m) { row = m - 1; col += 2; d = 1 - d;}
if(col >= n) { col = n - 1; row += 2; d = 1 - d;}
if(row < 0) { row = 0; d = 1 - d;}
if(col < 0) { col = 0; d = 1 - d;}
}
return res;
}
}
思路:
- 定义方向变量的二维数组dirs进行转换方向
- 转换方向的类型分为两种
上一篇: 用 Python 解数独