深搜+判断即可
class Solution {
public:
bool check(int s,int k){
int sm=0;
while(s){
sm+=s%10;
s/=10;
}
return k>=sm;
}
int ans=0;
int dir[4][2]={0,1,1,0,-1,0,0,-1};
int vis[110][110];
void dfs(int n,int m,int x,int y,int k){
if(check(x*100+y,k)){
ans++;
for(int i=0;i<4;i++){
int nx=x+dir[i][0];
int ny=y+dir[i][1];
if(nx<0||nx>=n||ny<0||ny>=m||vis[nx][ny]) continue;
vis[nx][ny]=1;
dfs(n,m,nx,ny,k);
}
}
}
int movingCount(int m, int n, int k) {
vis[0][0]=1;
dfs(n,m,0,0,k);
return ans;
}
};