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:codeNote: The total number of elements of the given matrix will not exceed
10,000.element
在矩阵遍历的状况下, 一共有两个方向, 右上(i--, j++)和左下(i++, j--)
右上的状况有三个边界条件:it
因此咱们能够先判断是否到达右边界, 而后判断是否达到上边界, 这样用两个condition就能够包含这三种状况io
左下一样两种状况class
O(mn) 空间O(mn)遍历
class Solution { public int[] findDiagonalOrder(int[][] matrix) { if (matrix.length == 0) { return new int[0]; } int size = matrix[0].length * matrix.length; int i =0, j =0; int[] res = new int[size]; boolean flag = true; //true 为右上 false为左下 for (int k = 0; k < size; k++) { res[k] = matrix[i][j]; if (flag) {//右上走 if (i-1 >= 0 && j+1 < matrix[0].length) { i--; j++; } else if (j + 1 < matrix[0].length) { //遇到右边界, 向下走 j++; flag = false; } else if (i+ 1 < matrix.length) {//遇到上边界, 向右 i++; flag = false; } } else {//向左下 if (j - 1 >=0 && i+1 < matrix.length) { i++; j--; } else if (i + 1 < matrix.length) {//遇到下边界,向右 i++; flag = true; } else if (j + 1 < matrix[0].length) {//遇到左边界, 向下走 j++; flag = true; } } } return res; } }