剑指 Offer 13. 机器人的运动范围
- 地上有一个m行n列的方格,从坐标
[0,0]
到坐标 [m-1,n-1]
。
- 一个机器人从坐标
[0, 0]
的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),
- 也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格
[35, 37]
,
- 因为3+5+3+7=18。但它不能进入方格
[35, 38]
,因为3+5+3+8=19
。请问该机器人能够到达多少个格子?
示例 1:
输入:m = 2, n = 3, k = 1
输出:3
示例 2:
输入:m = 3, n = 1, k = 0
输出:1
思路:
- 首先分析题目在一个二维数组中
- 那么我们是否需要
上下左右
的去走
- 还只是
下
和右
就可以解决
- 当确定好在二维数组的走势以后
- 再根据题意确定好辅助函数的递归出口
- 最后根据这道题确定辅助数组
class Solution {
boolean[][] vis;
public int movingCount(int m, int n, int k) {
vis = new boolean[m][n];
return dfs(0,0,m,n,k);
}
int dfs(int x,int y,int m,int n,int k) {
if (x >= m || y>= n || vis[x][y] ||
(x%10 + x/10 + y%10 + y/10) > k){
return 0;
}
vis[x][y] = true;
return 1 + dfs(x + 1,y,m,n,k) + dfs(x,y + 1,m,n,k);
}
}