Note:
就爆搜,加了一个和不超过K的限制条件而已
代码如下:
class Solution {
public:
vector<vector<bool>> st;
int res = 0;
int n, m;
int getSum(int x, int y){
int ans = 0;
while(x){
int a = x % 10;
ans += a;
x /= 10;
}
while(y){
int a = y % 10;
ans += a;
y /= 10;
}
return ans;
}
void dfs(int x, int y, int k){
int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};
st[x][y] = true;
res ++;
if(k <= 0) return;
for(int i = 0; i < 4; i ++){
int a = x + dx[i], b = y + dy[i];
if(a < 0 || a >= m || b < 0 || b >= n || st[a][b] || getSum(a, b) > k) continue;
dfs(a, b, k);
}
}
int movingCount(int _m, int _n, int k) {
m = _m, n = _n;
st = vector<vector<bool>>(m, vector<bool>(n, false));
dfs(0, 0, k);
return res;
}
};