LeetCode 剑指 Offer 13. 机器人的运动范围
- 原题
- 思路
- 代码
- 运行截图
- 收获
原题
LeetCode 剑指 Offer 13. 机器人的运动范围
思路
- 通过深度遍历来找出所有可达的格子
- 通过0、1、2来区分未遍历、可到达、不可到达三种状态
代码
class Solution {
public:
int visited[109][109];
int cnt = 0;
int direction[4][2] ={
{1,0},
{-1,0},
{0,1},
{0,-1}
};
int numK, numM, numN;
bool canVisited(int i, int j){
int num = 0;
while (i != 0){
num += i%10;
i /= 10;
}
while (j != 0){
num += j%10;
j /= 10;
}
if (num <= numK) return true;
return false;
}
void traverse(int i, int j){
if (!canVisited(i, j)){
visited[i][j] = 2;
return;
}
visited[i][j] = 1;
cnt++;
for (int t = 0; t < 4; t++){
int newi = i + direction[t][0];
int newj = j + direction[t][1];
if (newi >= 0 && newi < numM && newj >= 0 && newj < numN && visited[newi][newj] == 0) traverse(newi, newj);
}
}
int movingCount(int m, int n, int k) {
numK = k; numM = m; numN = n;
traverse(0, 0);
return cnt;
}
};