知识点
模拟
思路
我们模拟一下运动的过程,开始从(0,0)出发向下,一旦遇到边界或者访问过的位置就逆时针转向即可。
时间复杂度
AC Code(C++)
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param matrix int整型vector<vector<>> * @return int整型vector */ int dx[4] = {1, 0, -1, 0}; int dy[4] = {0, 1, 0, -1}; vector<int> spiralTravelCounterClockwise(vector<vector<int> >& matrix) { vector<int> res; int n = matrix.size(), m = matrix[0].size(); int k = 0, x = 0, y = 0; for (int i = 0; i < n * m; i ++) { res.push_back(matrix[x][y]); matrix[x][y] = 0; if (x + dx[k] < 0 or x + dx[k] >= n or y + dy[k] < 0 or y + dy[k] >= m or !matrix[x + dx[k]][y + dy[k]]) k = (k + 1) % 4; x += dx[k]; y += dy[k]; } return res; } };