Offer 29. 顺时针打印矩阵
题目
代码
该题其实有很多细节,比如matrix为空等等,详情在注释中。
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
int height = matrix.size();
vector<int>res;
//如果height为0,那么求matrix[0].size()会出错
if(height == 0) {
return res;
}
int length = matrix[0].size();
int u = 0,b = height - 1,l = 0,r = length - 1;
int i = 0;
while(true) {
//left到right,改变的是列
for(i = l; i <= r; i++) {
res.push_back(matrix[u][i]);
}
//上边界,先加减,再比较
if(++u > b) {
break;
}
//upper到bottom,改变的是行
for(i = u; i <= b; i++) {
res.push_back(matrix[i][r]);
}
//右边界
if(--r < l) {
break;
}
//right到left,改变的是列
for(i = r; i >= l ;i--) {
res.push_back(matrix[b][i]);
}
//下边界
if(--b < u) {
break;
}
//bottom到upper,改变的是行
for(i = b; i >= u; i--) {
res.push_back(matrix[i][l]);
}
//左边界
if(++l > r) {
break;
}
}
return res;
}
};