地上有一个 rows 行和 cols 列的方格。坐标从 [0,0] 到 [rows-1,cols-1] 。一个机器人从坐标 [0,0] 的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于 threshold 的格子。 例如,当 threshold 为 18 时,机器人能够进入方格 [35,37] ,因为 3+5+3+7 = 18。但是,它不能进入方格 [35,38] ,因为 3+5+3+8 = 19 。请问该机器人能够达到多少个格子?
方法一:深度搜索(深度搜索也写了不少了
class Solution {
public:
int sum(int n){
int sum = 0;
while(n){
sum += (n%10);
n = n/10;
}
return sum;
}
void dfs(int threshold,int rows,int cols,int i,int j,vector<vector<int>>& matr,int &move){
if(i<0 || i>=rows || j<0 || j>=cols || matr[i][j] == 0 ){
return;
}
if((sum(i)+sum(j)) > threshold){
return;
}
matr[i][j] = 0;
move++;
dfs(threshold,rows,cols,i+1,j,matr,move);
dfs(threshold,rows,cols,i,j+1,matr,move);
dfs(threshold,rows,cols,i-1,j,matr,move);
dfs(threshold,rows,cols,i,j-1,matr,move);
}
int movingCount(int threshold, int rows, int cols) {
if(threshold<0){
return 0;
}
int i=0,j=0;
vector<vector<int>> matr(rows,vector<int>(cols,1));
int move = 0;
dfs(threshold,rows,cols,i,j,matr,move);
return move;
}
};