classSolution { public: vector<int> spiralOrder(vector<vector<int>>& matrix){ //定义四个方向,然后根据越界和是否走过两个指标判断是否应该走下一个方向,最终遍历完毕整个矩阵 vector<int> res;//首先,定义答案 int n = matrix.size();//获得矩阵的尺寸 if (!n) return res; int m = matrix[0].size();//获得矩阵的尺寸
for(int i = 0, x = 0, y = 0, d = 0; i < n * m; i++){ //左上角,x = 0,y = 0。d代表方向。 res.push_back(matrix[x][y]); st[x][y] = true;
int a = x + dx[d], b = y + dy[d]; //判断a是否越界或者b是否越界或者matrix[a][b]是否被走过 if(a < 0 || a >= n || b < 0 || b >= m || st[a][b]){ d = (d + 1) % 4;//d一定在0,1,2,3内部循环。 a = x + dx[d], b = y + dy[d]; } x = a, y = b; } return res; } };