当前位置: 代码迷 >> 综合 >> LeetCode刷题:498. Diagonal Traverse
  详细解决方案

LeetCode刷题:498. Diagonal Traverse

热度:0   发布时间:2024-01-15 19:37:37.0

LeetCode刷题:498. Diagonal Traverse

原题链接:https://leetcode.com/problems/diagonal-traverse/

Given a matrix of M x N elements (M rows, N columns), return all elements of the matrix in diagonal order as shown in the below image.

Example:

Input:
[[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8, 9 ]
]Output:  [1,2,4,7,5,3,6,8,9]Explanation:

Note:

The total number of elements of the given matrix will not exceed 10,000.

算法设计

class Solution {public int[] findDiagonalOrder(int[][] matrix) {if (matrix.length == 0 || matrix[0].length == 0) {return new int[0];}int m = matrix.length;int n = matrix[0].length;int[] order = new int[m * n];int row = 0;int col = 0;//存储方向改变值,右上,或者左下int[][] dirs = {
   {-1, 1},{1, -1}};int k = 0;for (int i = 0; i < order.length; i++) {//将当前坐标赋值给新数组order[i] = matrix[row][col];//计算下一个点的坐标row += dirs[k][0];col += dirs[k][1];//根据边界条件,修正下一个点的坐标值.触碰边界,必然对方向取反//右上方向碰到边界if (col > n - 1) {col = n - 1;row += 2;//方向取反k = 1 - k;}if (row < 0) {row = 0;k = 1 - k;}//左下方向碰到边界if (row > m - 1) {row = m - 1;col += 2;k = 1 - k;}if (col < 0) {col = 0;k = 1 - k;}}return order;}
}

提交之后,Accepted!