做题回顾:https://leetcode.com/explore/learn/card/array-and-string/202/introduction-to-2d-array/1167/
一道看似复杂的数组Z型遍历问题
题目如下:
给定一个M x N个元素的矩阵(M行,N列),按对角线顺序返回矩阵的所有元素,如下图所示。 例:输入:
[ [1,2,3],
[4,5,6],
[7,8,9] ]
输出: [1,2,4,7,5,3,6,8,9]
说明:
注意:给定矩阵的元素总数将不超过10,000。
解决思路:
分别判断遇到的边界,修改数组下标的值。注意输入为 [ ]、[[ ]] 的情况。小心判断下标的变化。
代码如下:
class Solution {
public:
vector<int> findDiagonalOrder(vector<vector<int>>& matrix) {
vector<int> return_array;
int m = 0, n = 0, M = matrix.size();
if(M == 0)
return return_array;
int N = matrix[0].size();
if(N == 0)
return return_array;
if(N < 0 || M < 0){
return return_array;
}
for(int i = 0; i < (N * M); i++){
return_array.push_back(matrix[m][n]);
if((n + m) % 2 == 0){
if (n == (N - 1)) {
m += 1;
}
else if (m == 0) {
n += 1;
}
else{
m -= 1, n += 1;
}
}
else{
if(m == (M - 1)){
n += 1;
}
else if(n == 0){
m += 1;
}
else{
m += 1, n -= 1;
}
}
}
return return_array;
}
};
Accept~