题解 | #机器人的运动范围#
机器人的运动范围
https://www.nowcoder.com/practice/6e5207314b5241fb83f2329e89fdecc8
class Solution {
private:
int search(int x, int y, int threshold, vector<vector <int>>& matrix) {
/*
从当前节点出发,可以到的格子
*/
if (x < 0 || x >= matrix.size() || y < 0 || y >= matrix[0].size() ||
matrix[x][y] || !underThreshold(x, y, threshold)) {
return 0;
}
matrix[x][y] = 1;
return 1 + search(x + 1, y, threshold, matrix) +
search(x - 1, y, threshold, matrix) +
search(x, y + 1, threshold, matrix) +
search(x, y - 1, threshold, matrix);
}
bool underThreshold(int x, int y, int threshold) {
/*
用于判断 x y 提取出来是否都小于阈值
*/
int val = 0;
while (x > 0) {
val += x % 10;
x = x / 10;
}
while (y > 0) {
val += y % 10;
y = y / 10;
}
if (val > threshold) return false;
else return true;
}
public:
int movingCount(int threshold, int rows, int cols) {
// 似乎没有为空的情况要判断
vector<vector <int>> matrix(rows,
vector<int>(cols)); // 注意这个构造函数的写法
vector<int> resultVec;
// 先给matrix赋值, 0表示未到达
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
matrix[i][j] = 0;
}
}
return search(0, 0, threshold, matrix);
}
};
查看8道真题和解析