LeetCode 498. Diagonal Traverse

Posted Dylan_Java_NYC

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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.

题解:

The result size should be m*n.

For each value, when r + c is even, index in matrix is moving right up. First check if it is hitting right, if yes, move down. Then check if it is hitting up, if yes, move right. Otherwise move right up.

When r + c is odd, index in matrix is moving left down.First check if it is hitting down, if yes, move right. Then check if it is hitting left, if yes, move down. Otherwise move left down.

Think this as when it hit the corner, which direction it would move first.

Time Complexity: O(m*n). m = matrix.length. n = matrix[0].length.

Space: O(1). regardless res.

AC Java:

 1 class Solution {
 2     public int[] findDiagonalOrder(int[][] matrix) {
 3         if(matrix == null || matrix.length == 0 || matrix[0].length == 0){
 4             return new int[0];
 5         }
 6         
 7         int m = matrix.length;
 8         int n = matrix[0].length;
 9         int [] res = new int[m*n];
10         int r = 0;
11         int c = 0;
12         for(int i = 0; i<m*n; i++){
13             res[i] = matrix[r][c];
14             
15             if((r + c) % 2 == 0){
16                 if(c == n-1){
17                     r++;
18                 }else if(r == 0){
19                     c++;
20                 }else{
21                     r--;
22                     c++;
23                 }
24             }else{
25                 if(r == m - 1){
26                     c++;
27                 }else if(c == 0){
28                     r++;
29                 }else{
30                     r++;
31                     c--;
32                 }
33             }
34         }
35         
36         return res;
37     }
38 }

类似Spiral Matrix.

以上是关于LeetCode 498. Diagonal Traverse的主要内容,如果未能解决你的问题,请参考以下文章

LEETCODE 498. 对角线遍历

498. Diagonal Traverse

498. Diagonal Traverse

498. Diagonal Traverse

498. Diagonal Traverse

498. Diagonal Traverse对角线z型traverse