注意边界情况,如果始终保持左闭右开会造成奇数行列时(四个for循环互相推诿)漏掉。故采用以下方法
class Solution {
public:
vector<int> printMatrix(vector<vector<int> > matrix) {
if(matrix.size()<1) return vector<int>();
if(matrix.size()==1) return matrix[0];
int down=matrix.size()-1;
int right=matrix[0].size()-1;
int up=0,left=0;
vector<int> ans;
while(left<=right&&up<=down){
for(int i=left;i<=right;i++){
ans.push_back(matrix[up][i]);
}
for(int i=up+1;i<=down;i++){
ans.push_back(matrix[i][right]);
}
for(int i=right-1;i>=left&&up!=down;i--){//不加&&up!=down就会在奇数行造成回文效果
ans.push_back(matrix[down][i]);
}
for(int i=down-1;i>up&&left!=right;i--){
ans.push_back(matrix[i][left]);
}
left++,right--,up++,down--;
}
return ans;
}
};