题解 | #牧场边界巡游# 模拟移动
牧场边界巡游
https://www.nowcoder.com/practice/bc7fe78f7bcc49a8bc0afdd7a55ca810
知识点
模拟
思路
我们模拟一下运动的过程,开始从(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;
}
};
查看11道真题和解析


