码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode 498. Diagonal Traverse

时间:2019-12-10 13:02:21      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:example   rdl   tle   color   note   lan   for   return   http   

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

标签:example   rdl   tle   color   note   lan   for   return   http   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!