题目描述:
地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?
public class Solution {
int count=0;
public void func(int[][] flag,int i,int j,int threshold,int rows,int cols){
//判断是否出界和已经被访问过
if(i<0||i>=rows||j<0||j>=cols||flag[i][j]==1){
return;
}
//不满足位和小于threshold,也需要标记为访问过
if(!isVaild(threshold,i,j)){
flag[i][j]=1;
return;
}
//满足条件count++
count++;
flag[i][j]=1;
//上下左右深度遍历
func(flag,i-1,j,threshold,rows,cols);
func(flag,i+1,j,threshold,rows,cols);
func(flag,i,j-1,threshold,rows,cols);
func(flag,i,j+1,threshold,rows,cols);
}
public boolean isVaild(int threshold,int rows,int cols){
int sum=0;
while(rows>0){
sum+=rows%10;
rows/=10;
}
while(cols>0){
sum+=cols%10;
cols/=10;
}
if(sum>threshold){
return false;
}else{
return true;
}
}
public int movingCount(int threshold, int rows, int cols)
{
int[][]flag=new int[rows][cols];
func(flag,0,0,threshold,rows,cols);
return count;
}
}