class Solution { public: int res = 0; int cal(int n){ int sum = 0; while(n){ sum += (n%10); n/=10; } return sum; } void dfs(int threshold, vector<vector<bool>>& visited, int i, int j, int rows, int cols){ if (i<0||i>=rows||j<0||j>=cols||visited[i][j]) return; if (cal(i)+cal(j)>threshold) return; res += 1; visited[i][j] = true; dfs(threshold, visited, i+1, j, rows, cols); dfs(threshold, visited, i-1, j, rows, cols); dfs(threshold, visited, i, j+1, rows, cols); dfs(threshold, visited, i, j-1, rows, cols); } int movingCount(int threshold, int rows, int cols) { vector<vector<bool>> visited(rows, vector<bool>(cols, false)); dfs(threshold, visited, 0, 0, rows, cols); return res; } };