public class Solution {
int k=0;
public int movingCount(int threshold, int rows, int cols)
{
if(threshold==0)
return 0;
int [][]visit=new int[rows][cols];
for(int i=0;i<rows;i++){
for(int j=0;j<cols;j++){
visit[i][j]=0;
}
}
//visit[0][0]=1;这个语句一旦写上程序就没有入门了 因为起始点标注了已访问
moveCount(visit,threshold,0,0);
return k;
}
public void moveCount(int[][]visit,int threshold,int i,int j){
//条件一定要仔细仔细再仔细!j>visit[0].length-1,[0]很重要 -1也很重要
if(i<0||i>visit.length-1||j<0||j>visit[0].length-1||visit[i][j]==1||cantArrive(i,j,threshold)){
return;
}
k++;
visit[i][j]=1;
moveCount(visit,threshold,i,j-1);
moveCount(visit,threshold,i,j+1);
moveCount(visit,threshold,i-1,j);
moveCount(visit,threshold,i+1,j);
//visit[i][j]=0;
}
public boolean cantArrive(int i,int j, int threshold){
int sum1=0;
int sum2=0;
while(i/10!=0){
sum1+=i%10;
i/=10;
}
sum1+=i;
while(j/10!=0){
sum2+=j%10;
j/=10;
}
sum2+=j;
if(sum1+sum2>threshold)
return true;
else
return false;
}
}