思路
题意是给定一个[m,n]的方格子,机器人从左上向右下一定每次移动不能超过k,而k的值是每个格子坐标的数位之和
,求该机器人能到达多少格子。我们从(0,0)坐标开始往右或者往下dfs,在遇到越界或者计算坐标数位和大于k或者已经访问过了则return 0。
代码
class Solution {
private int cal(int x,int y){
int sum = 0;
while(x!=0){
sum+=x%10;
x/=10;
}
while(y!=0){
sum+=y%10;
y/=10;
}
return sum;
}
private int dfs(int x, int y, int m, int n, int k, boolean[][]visit){
if(x>=m||y>=n||visit[x][y]||cal(x,y)>k) return 0;
visit[x][y]= true;
return 1+dfs(x+1,y,m,n,k,visit)+dfs(x,y+1,m,n,k,visit);
}
public int movingCount(int m, int n, int k) {
boolean visit[][] = new boolean[m][n];
return dfs(0,0,m,n,k,visit);
}
}