剑指Offer 顺时针打印矩阵

时间:2023-03-09 13:41:40
剑指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.
思路:
设置圈的概念,一圈一圈打印,圈起点的位置为左上角,圈的层数和row,col中小的数有关。打印的时候需要判断最后一圈,可能存在,只有一行或一列或一个数的情况。
AC代码:
 class Solution {
public:
vector<int> printMatrix(vector<vector<int> > matrix) {
vector<int> ans; int row=matrix.size();
int col=matrix[].size(); int circle=((row<col?row:col)-)/+; for(int i=;i<circle;i++)
{
for(int j=i;j<col-i;j++)
ans.push_back(matrix[i][j]); for(int k=i+;k<row-i;k++)
ans.push_back(matrix[k][col-i-]); for(int m=col-i-;(m>=i)&&(row-i-!=i);m--)
ans.push_back(matrix[row-i-][m]); for(int l=row-i-;(l>i)&&(col-i-!=i);l--)
ans.push_back(matrix[l][i]);
} return ans;
}
};