机器人的运动范围
class Solution {
int m,n,k;
boolean[][]visited;
public int movingCount(int m,int n,int k){
this.m=m;
this.n=n;
this.k=k;
this.visited=new boolean[m][n];
return dfs(0,0,0,0);
}
public int dfs(int i,int j,int si,int sj){
//走到四个边界,或者位数和大于看k,或者此位置走过,标记出来,是可行性剪枝
if(i>=m||j>=n|| si+sj>k||visited[i][j]) return 0;
visited[i][j]=true;
//回溯返回值:返回1+右方搜索的可达解总数+下方搜索的可达解总数
return 1+dfs(i+1,j,(i+1)%10!=0?si+1:si-8,sj)+dfs(i,j+1,si,(j+1)%10!=0?sj+1:sj-8);
}
}
参考文献:
https://leetcode-cn.com/problems/ji-qi-ren-de-yun-dong-fan-wei-lcof/