顺时针打印矩阵
1.题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 1:
示例 2:
限制:
0 <= matrix.length <= 100
0 <= matrix[i].length <= 100
2.思路
考虑设定矩阵的“左、上、右、下”四个边界,矩阵遍历顺序为:
将元素按顺序添加至数组 res 尾部。
边界判定:
3.代码
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int> res;
if(matrix.empty()){
return res;
}
int left = 0,top = 0,right = matrix[0].size() - 1, bottom = matrix.size() - 1;
while(true){
for(int i = left;i <= right;++i){
res.push_back(matrix[top][i]);
}
if(++top > bottom){
break;
}
for(int i = top;i <= bottom;++i){
res.push_back(matrix[i][right]);
}
if(--right < left){
break;
}
for(int i = right;i >= left;--i){
res.push_back(matrix[bottom][i]);
}
if(--bottom < top){
break;
}
for(int i = bottom;i >= top;--i){
res.push_back(matrix[i][left]);
}
if(++left > right){
break;
}
}
return res;
}
};
4.复杂度分析
时间复杂度:O(MN),M、N为矩阵的长和宽
空间复杂度:O(MN)