描述
给你一个包含 m x n 个元素的矩阵 (m 行, n 列), 求该矩阵的之字型遍历。
您在真实的面试中是否遇到过这个题?
是
样例
对于如下矩阵:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10, 11, 12]
]
返回 [1, 2, 5, 9, 6, 3, 4, 7, 10, 11, 8, 12]
这道题重点在于找规律,考虑仔细。
向右移动的情况:不在最右边,第0行且偶数列或者最后一行行列相加是奇数
向下移动的情况:不在最下边,第0列且奇数行或者最后一列行列相加是偶数
向左下移动,除上述情况外,行列相加是奇数
向右上移动,除上述情况外,行列相加是偶数
class Solution {
public:
/**
* @param matrix: An array of integers
* @return: An array of integers
*/
vector<int> printZMatrix(vector<vector<int>> &matrix) {
// write your code here
int m = matrix.size()-1;
int n = matrix[0].size()-1;
vector<int> ret;
ret.reserve(m*n);
int i=0, j=0;
while(1)
{
ret.push_back(matrix[i][j]);
if(i==m&&j==n) return ret;
if((j!=n) && ((i==0 && !(j&1)) || (i==m && (i+j)&1 )) ) j++;
else if((i!=m)&&((j==0 && (i&1)) || (j==n && !((i+j)&1))) ) i++;
else if(!((i+j)&1))
{
j++;
i--;
}
else if((i+j)&1)
{
i++;
j--;
}
}
}
};