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.
1 public class Solution { 2 public int[] findDiagonalOrder(int[][] matrix) { 3 if (matrix.length == 0 || matrix[0].length == 0) 4 return new int[0]; 5 6 int m = matrix.length, n = matrix[0].length, N = m * n; 7 int[] result = new int[N]; 8 int i = 0, j = 0, index = 0, time = 1; 9 while (index < N && i < m && j < n) { 10 if (time == 1) { 11 while(i >= 0 && j < n) { 12 result[index++] = matrix[i][j]; 13 14 i -= 1; 15 j += 1; 16 17 if (j == n) 18 i += 2; 19 } 20 i = Math.max(0, i); 21 j = Math.min(n - 1, j); 22 23 time = 2; 24 } else { 25 while (i < m && j >= 0) { 26 result[index++] = matrix[i][j]; 27 i += 1; 28 j -= 1; 29 30 if (i == m) 31 j += 2; 32 } 33 i = Math.min(m - 1, i); 34 j = Math.max(0, j); 35 36 time = 1; 37 } 38 } 39 return result; 40 } 41 }