17,顺时针打印矩阵《剑指Offer》
题目:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
思路:
四个方向遍历,每遍历一个方向那个方向的边 就去掉
注意的是:循环最后外面四个边的关系需要确定清楚
代码:
class Solution {
public:
vector<int> printMatrix(vector<vector<int> > matrix) {
vector<int> res;
int top=0;
int bottom=matrix.size()-1;
int left=0;
int right=matrix[0].size()-1;
while(left<right&&top<bottom){
//left--->right
for(int i=left;i<=right;i++){
res.push_back(matrix[top][i]);
}
top++;
//top--->bottom
for(int i=top;i<=bottom;i++){
res.push_back(matrix[i][right]);
}
right--;
//right--->left
for(int i=right;i>=left;i--){
res.push_back(matrix[bottom][i]);
}
bottom--;
//bottom->top
for(int i=bottom;i>=top;i--){
res.push_back(matrix[i][left]);
}
left++;
}
//执行到这里只有几种情况:
//1:left==right top!=bottom 一列或没有
//2:top==bottom left!=right 一行或没有
//left==right==top==bottom 只有一个
if(left==right&&top!=bottom){
for(int i=top;i<=bottom;i++){
res.push_back(matrix[i][left]);
}
}
if(top==bottom){
for(int i=left;i<=right;i++){
res.push_back(matrix[top][i]);
}
}
return res;
}
};

浙公网安备 33010602011771号