剑指offer题目19:顺时针打印矩阵
题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

解答思路
其实想清楚了就不太难了,就是输出矩阵的一圈数据,然后圈子“半径”-1,继续输出。问题是我卡在细节的判断上面。。没有想到如果输入的数据只有一行的时候或者只有一列的时候。。
实现代码
class Solution {
public:
vector<int> printMatrix(vector<vector<int> > matrix) {
vector<int> collector;
if(matrix.empty()) {
return collector;
}
// 矩形的四个点
int end_x = matrix[0].size()-1;
int end_y = matrix.size()-1;
int start_x = 0, start_y = 0;
while(start_y <= end_y && start_x <= end_x) {
int i;
for (i = start_x; i <= end_x; ++i)
{
collector.push_back(matrix[start_y][i]);
}
for (i = start_y + 1; i <= end_y; ++i)
{
collector.push_back(matrix[i][end_x]);
}
// 防止只有一行的情况,会导致倒叙输出那一行
if(start_y != end_y) {
for (i = end_x - 1; i >= start_x; --i)
{
collector.push_back(matrix[end_y][i]);
}
}
// 防止只有一列的情况,会导致倒叙输出那一行
if(start_x != end_x) {
for (i = end_y - 1; i > start_y; --i)
{
collector.push_back(matrix[i][start_x]);
}
}
// 边框缩小
++start_x;
++start_y;
--end_y;
--end_x;
}
return collector;
}
};
作者:大傻逼
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

浙公网安备 33010602011771号