class Solution {
private static int res=0;
private static int threshold=0;
public int movingCount(int thresholds, int rows, int cols) {
threshold=thresholds;
//BFS思路
if(rows==0||cols==0) return 0;
boolean visited[][]=new boolean[rows][cols];
for(int i=0;i<rows;i++){
for(int j=0;j<cols;j++){
visited[i][j]=false;
}
}
dfs(visited,0,0);
return res;
}
private static void dfs(boolean[][]visited,int x,int y){
if(getSum(x,y)>threshold||visited[x][y]==true){
return ;
}
visited[x][y]=true;
res+=1;
int dx[]=new int[]{0,-1,0,1};
int dy[]=new int[]{1,0,-1,0};
for(int i=0;i<4;i++){
int a=x+dx[i];
int b=y+dy[i];
if(a>=0&&a<visited.length&&b>=0&&b<visited[a].length){
dfs(visited,a,b);
}
}
}
public static int getSum(int x,int y) {
return getValue(x)+getValue(y);
}
public static int getValue(int x){
int sum=0;
while(x!=0){
sum+=x%10;
x=x/10;
}
return sum;
}
}
具体的这里备注一下自己用bfs的思路来解决这个问题,作为解决这一类问题的模板。基本上这一模板已经初步掌握,下一步准备加强联系二叉树方面的递归写法以及动态规划问题。