CodingInterview-顺时针打印矩阵

这道题的思路比较简单,就是因为每个边都要打印,所以想起来和写起来会比较麻烦。

最后需要注意的是如果还剩下最后变成一个向量而非多维矩阵的时候,要在大循环结束后进行一些特殊处理。并且,尤其要注意如果输入的是 1*1 的矩阵,那么最后一步如果没有top!=bottom的话,会将数字添加两遍,所以再提交代码前,一定要想好特例,并在大脑中运行一遍。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
public:
vector<int> printMatrix(vector<vector<int> > matrix) {
vector<int> result;
if(matrix.size()<1 || matrix[0].size()<1) return result;
int top=0,bottom=matrix.size()-1,left=0,right=matrix[0].size()-1;
while(bottom>top && right>left){
for(int i=left;i<=right;i++) result.push_back(matrix[top][i]);
for(int i=top+1;i<=bottom;i++) result.push_back(matrix[i][right]);
for(int i=right-1;i>=left;i--) result.push_back(matrix[bottom][i]);
for(int i=bottom-1;i>top;i--) result.push_back(matrix[i][left]);
top++,bottom--,left++,right--;
}
if(top==bottom){
for(int i=left;i<=right;i++) result.push_back(matrix[top][i]);
}
if((top!=bottom)&&(left==right)){
for(int i=top;i<=bottom;i++) result.push_back(matrix[i][left]);
}
return result;
}
};