剑指 Offer 29. 顺时针打印矩阵 - 力扣(LeetCode) (leetcode-cn.com)
class Solution {
public:
typedef long long Num;
vector<int> spiralOrder(vector<vector<int>>& matrix) {
Num row_beg = 0, row_end = matrix.size();
if (row_end == 0) return {};
Num col_beg = 0, col_end = matrix[0].size();
Num size = row_end * col_end;
vector<int> res(size);
Num cur = 0;
while (row_beg < row_end && col_beg < col_end) {
for (Num i = col_beg; i < col_end; ++i) res[cur++] = matrix[row_beg][i];
for (Num i = row_beg + 1; i < row_end; ++i) res[cur++] = matrix[i][col_end - 1];
if (cur == size) break;
for (Num i = col_end - 2; i >= col_beg; --i) res[cur++] = matrix[row_end - 1][i];
for (Num i = row_end - 2; i > row_beg; --i) res[cur++] = matrix[i][col_beg];
++row_beg, ++col_beg, --row_end, --col_end;
}
return res;
}
};