题解 | #机器人的运动范围#
机器人的运动范围
http://www.nowcoder.com/practice/6e5207314b5241fb83f2329e89fdecc8
class Solution {
public:
int digitalSum(int num) {
int sum = 0;
while(num > 0) {
sum += num % 10;
num /= 10;
}
return sum;
}
int dfs(int threshold,int rows,int cols,int row,int col,
vector<vector<bool>> &isVisited) {
if (row < 0 || col < 0 || row >= rows ||
col >= cols || isVisited[row][col] ||
digitalSum(row) + digitalSum(col) > threshold)
return 0;
isVisited[row][col] = 1;
return dfs(threshold, rows, cols, row - 1, col, isVisited)
+ dfs(threshold, rows, cols, row + 1, col, isVisited)
+ dfs(threshold, rows, cols, row, col - 1, isVisited)
+ dfs(threshold, rows, cols, row, col + 1, isVisited)
+ 1;
}
int movingCount(int threshold, int rows, int cols) {
if(threshold < 0 || rows <= 0 || cols <= 0) return 0;
vector<vector<bool>> isVisited(rows, vector<bool>(cols));//标记
return dfs(threshold, rows, cols, 0, 0, isVisited);
}
}; 