class Solution {
public:
vector<int> printMatrix(vector<vector<int> > matrix) {
vector<int> r;
r.clear();
//matrix[hang][lie]
int hang = matrix.size(),
lie = matrix[0].size();
//圈数;从左到右,从上到下,从右到左,从下到上为一圈
int quan = ((hang < lie ? hang : lie) + 1) / 2;//取最小值计算圈数
//不要忘记数组都是下标从0开始,不要忘记减去1
for(int i = 0; i < quan; i++)
{
//从左往右打印
for(int j = i; j < lie - i; j++)
r.push_back(matrix[i][j]);//每次都是行j变列不变
//从上往下打印
for(int k = i + 1; k < hang - i; k++)//k=i+1表示从i的下一行开始
r.push_back(matrix[k][lie - 1 - i]);//每次都是行不变列k变
//从右往左打印,记得判断是否重复
for(int m = lie - 1 - 1 - i; (m >= i) && (hang - 1 - i != i) ; m--)
r.push_back(matrix[hang - 1 - i][m]);//每次都是行m变列不变
//从下往上打印
for(int n = hang - 1 - 1 -i ; (n > i) && (lie - 1 - i != i) ; n--)
r.push_back(matrix[n][i]);//每次都是行不变列n变
}
return r;
}
};
剑指offer:顺时针打印矩阵
最新推荐文章于 2024-02-13 14:48:31 发布