您的位置:首页 > 其它

【剑指**】29.顺时针打印矩阵

2018-03-05 14:59 288 查看

29.顺时针打印矩阵

题目描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下
矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字
1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.


题目分析

思路请参考《剑指offer》 p161

这道题目比较绕,边界容易写错,多看看。。。

代码

class Solution {
public:
vector<int> printMatrix(vector<vector<int> > matrix) {
if (matrix.empty()) return {};
int start = 0;
int row = matrix.size();
int col = matrix[0].size();
vector<int> ret;
while (row > start * 2 && col > start * 2) {
print_matrix(matrix, start, ret);
++start;
}
return ret;
}
void print_matrix(vector<vector<int> >& matrix, int start, vector<int>& ret) {
int endX = matrix[0].size() - 1 - start;
int endY = matrix.size() - 1 - start;
// 左->右行,一定存在
for (int j = start; j <= endX; j++) {
ret.push_back(matrix[start][j]);
}
// 上-> 下
if (start < endY) {
for (int i = start + 1; i <= endY; i++) {
ret.push_back(matrix[i][endX]);
}
}
//右->左
if (start < endX && start < endY) {
for (int j = endX - 1; j >= start; j--) {
ret.push_back(matrix[endY][j]);
}
}
//下->上
if (start < endY - 1 && start < endX) {
for (int i = endY - 1; i >= start + 1; i--) {
ret.push_back(matrix[i][start]);
}
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: