class Solution {
public:
int flag[110][110];
int ans;
int movingCount(int m, int n, int k) {
dfs(0,0,k,m,n);
return ans;
}
void dfs(int x,int y,int k,int m,int n){
if(x>=m||y>=n||x<0||y<0||sum(x,y)>k) return ;
if(flag[x][y]==1) return ;
if(sum(x,y)<=k){
flag[x][y]=1;
ans++;
}
dfs(x+1,y,k,m,n);
dfs(x-1,y,k,m,n);
dfs(x,y+1,k,m,n);
dfs(x,y-1,k,m,n);
}
int sum(int a, int b){
int summ = 0;
while(a!=0){
summ += a%10;
a /= 10;
}
while(b!=0){
summ += b%10;
b /= 10;
}
return summ;
}
};
前前后后踩了两个坑
1.题目理解,不是两个for循环,是走格子,因为被挡住的地方不可以再走了
2.坐标的每一位求和,不是坐标直接求和
用的dfs,不是很复杂