首页 > 其他 > 详细

LeetCode 498. Diagonal Traverse

时间:2019-12-10 14:08:22      阅读:127      评论:0      收藏:0      [点我收藏+]

原题链接在这里: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

原文:https://www.cnblogs.com/Dylan-Java-NYC/p/12015933.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!