题目描述:
给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。
输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
输出: [1,2,4,7,5,3,6,8,9]
原题链接: https://leetcode-cn.com/leetbook/read/array-and-string/cuxq3/
法1
假设矩阵为M*N
首先对空矩阵以及只有一行或一列的矩阵进行处理。
对于一般矩阵,可以确定,左上角元素与右下角元素分别为第一个最后一个遍历到的元素。所以先把它们给搞出来。
对于剩下的元素,主要需要考虑的问题是遍历的方向以及到达边界后如何位移的问题。
将边界分为上边界与下边界。
下边界是矩阵的左边以及底边,上边界是矩阵的顶边与右边。然后对边界进行分类讨论就好了。
代码如下,已测试,结果正确。
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
vector<int> findDiagonalOrder(vector<vector<int>>& matrix) {
vector<int> res;
int raw = matrix.size();
if(raw==0){
return res;
}//空矩阵情况
int col = matrix[0].size();
int num = raw * col-2;
int m = 0;
int n = 1;
int flag = 0;
if