题目描述:
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:
1 2 3 4 5 6 7 8 9 10
| 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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| class Solution { enum DIRECTION { DownLeft = 0, UpRight = 1 }; public: vector<int> findDiagonalOrder(vector<vector<int>>& matrix) { int row = matrix.size(); if (row == 0) return vector<int>(); int col = matrix[0].size(); if (col == 0) return vector<int>(); vector<int> ans; DIRECTION direction = UpRight; int x = 0, y = 0; while (x != row - 1 || y != col - 1) { ans.push_back(matrix[x][y]); if (direction == UpRight) { if (y == col - 1) { x++; direction = DownLeft; } else if (x == 0) { y++; direction = DownLeft; } else { x--; y++; } } else { if (x == row - 1) { y++; direction = UpRight; } else if (y == 0) { x++; direction = UpRight; } else { x++; y--; } } } ans.push_back(matrix[row - 1][col - 1]); return ans; } };
|