public class Solution {
public int movingCount(int threshold, int rows, int cols)
{
boolean[][] flag=new boolean[rows][cols];
return moveCountCore(threshold,rows,cols,0,0,flag);
}
private int moveCountCore(int threshold,int rows,int cols,int i,int j,boolean[][]flag){
//不满足条件时 返回0
if(i<0||j<0||i>=rows||j>=cols||flag[i][j]==true||count(i)+count(j) > threshold){
return 0;
}
flag[i][j] = true;
//满足条件时 计算其余四个方格的情况并?1
return 1 + moveCountCore(threshold,rows,cols,i+1,j,flag) +
moveCountCore(threshold,rows,cols,i-1,j,flag) +
moveCountCore(threshold,rows,cols,i,j+1,flag) +
moveCountCore(threshold,rows,cols,i,j-1,flag);
}
/*
计算一个数字的各个位的数字之和
*/
private int count(int num){
String str = String.valueOf(num);
int sum=0;
for(int i =0;i<str.length();i++){
sum += str.charAt(i) - ‘0‘;
}
return sum;
}
public static void main(String[] args) {
}
}