题目:
给你一个包含 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]
思路:
- 画图可知,之走走法一共有四种步骤:右上;右平移一步;下平移一步;左下。
- 走法的规律是:先右上,然后右平移或下平移一步(注意判断顺序);再左下,然后下平移或者右平移一步(注意判断顺序)
- 注意: 右上和左下的步骤是要循环的(多次);右平移和下平移都只有一次。
参考答案:
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*/
vector<int> res;
if(matrix.empty()) return res;
int m = matrix.size();
/*if(m == 0) return res;*/
int n = matrix[0].size();
/*if(n == 0) return res;*/
res.push_back(matrix[0][0]);
int i=1; //记录矩阵个数
int row=0; //记录行
int col=0; //记录列
while(i < n*m){
while(row-1>=0 && col+1<n){
res.push_back(matrix[--row][++col]); //表示左上的走法
i++;
}
if(col+1 < n){
res.push_back(matrix[row][++col]); //表示向右平移一步的走法
i++;
}
else if(row+1 < m){
res.push_back(matrix[++row][col]); //向下移动一步的走法
i++;
}
while(row+1<m && col-1>=0){
res.push_back(matrix[++row][--col]); //表示右下的走法
i++;
}
if(row+1<m){
res.push_back(matrix[++row][col]); //表示向下移动一步的走法
i++;
}
else if(col+1<n){
res.push_back(matrix[row][++col]); //表示向右平移一步的走法
i++;
}
}
return res;
}
};
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。