class Solution { public: int getDigitSum(int number) { int sum = 0; while(number) { sum+=number%10; number/=10; } return sum; } int movingCountCore(int threshold, int rows, int cols, int row, int col, vector<vector<bool> >& visit) { if (row < 0 || row >= rows || col < 0 || col >= cols) return 0; int count = 0; if (!visit[row][col] && getDigitSum(row)+getDigitSum(col) <= threshold) { visit[row][col] = true; ++ count; const int dx[4] = {-1, 0, 1, 0}; const int dy[4] = {0, 1, 0, -1}; for (int i = 0; i < 4; ++ i) { count += movingCountCore(threshold, rows, cols, row+dx[i], col+dy[i], visit); } } return count; } int movingCount(int threshold, int rows, int cols) { if (threshold <= 0 || rows <=0 || cols <= 0) return 0; vector<vector<bool> > visit(rows, vector<bool>(cols, false)); return movingCountCore(threshold, rows, cols, 0, 0, visit); } };