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;}
};