题目地址:
https://www.acwing.com/problem/content/39/
输入一个 m × n m\times n m×n矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
数据范围:
矩阵中元素数量
[
0
,
400
]
[0,400]
[0,400]。
代码如下:
#include <vector>
using namespace std;
class Solution {
public:
vector<int> printMatrix(vector<vector<int>> A) {
vector<int> res;
if (A.empty() || A[0].empty()) return res;
int d[] = {0, 1, 0, -1, 0};
int m = A.size(), n = A[0].size();
int x = 0, y = 0, dir = 0;
while (res.size() < m * n) {
res.push_back(A[x][y]);
A[x][y] = 0;
int nx = x + d[dir], ny = y + d[dir + 1];
// 如果不能走,就换个方向走
if (!(0 <= nx && nx < m && 0 <= ny && ny < n && A[nx][ny])) {
dir = (dir + 1) % 4;
nx = x + d[dir], ny = y + d[dir + 1];
}
x = nx, y = ny;
}
return res;
}
};
时间复杂度 O ( m n ) O(mn) O(mn),空间 O ( 1 ) O(1) O(1)。