给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。
示例:
输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
输出: [1,2,4,7,5,3,6,8,9]
解释:
说明:
1.给定矩阵中的元素总数不会超过 100000 。
参考大神做法:
vector<int> findDiagonalOrder(vector<vector<int>>& matrix) {
vector<int> res;
if(matrix.empty()) return res;
const int m = matrix.size();
const int n = matrix[0].size();
for(int l = 0; l < m + n - 1; l++){
if(l % 2 == 0){ //左往上
//起始位置 l<m:(1,0) l>m: ((m-1),(l-m+1))
int i = (l < m ? l : (m - 1));
int j = (l < m ? 0 : (l - m + 1));
while(i >= 0 && j < n){
res.push_back(matrix[i][j]);
i--;
j++;
}
}
else{
int i = (l < n ? 0 : (l - n + 1));
int j = (l < n ? l : (n - 1));
while(i < m && j >= 0){
res.push_back(matrix[i][j]);
i++;
j--;
}
}
}
return res;
}
这道题的重点是对边界条件的判断。