C++/代码:
版本一:
class Solution {
public:
int row, col, res;//定义全局变量,res为输出变量
int movingCount(int threshold, int rows, int cols) {
vector<vector<bool>> matrix(rows, vector<bool>(cols)); //定义一个rows行cols列的矩阵容器
row = rows, col = cols; //为全局变量赋值
return dfs(threshold, 0, 0, matrix);
}
int dfs (int threshold, int x, int y, vector<vector<bool>> &matrix) { //定义回溯函数
if (Sum(x) + Sum(y) > threshold || x <0 || x >= row || y < 0 || y >= col || matrix[x][y]) return false;
matrix[x][y] = true;//将访问的地方赋值true
return dfs(threshold, x - 1, y, matrix) //up
+dfs(threshold, x + 1, y, matrix) //down
+dfs(threshold, x, y - 1, matrix) //left
+dfs(threshold, x, y + 1, matrix) //right
+1;
}
int Sum(int x) { //单个横纵坐标的各个位数之和
int sum = 0;
while(x) sum += x % 10, x /= 10;
return sum;
}
};版本二:
class Solution {
public:
int movingCount(int threshold, int rows, int cols) {
int cnt = 0;
for (int i = 0; i < rows; i ++)
for(int j = 0; j < cols; j ++){
if(Sum(i) + Sum(j) <= threshold) cnt++;
else if(rows == 1 || cols == 1) return cnt;
}
return cnt;
}
int Sum(int x) { //单个横纵坐标的各个位数之和
int sum = 0;
while(x) sum += x % 10, x /= 10;
return sum;
}
};
京公网安备 11010502036488号