代码中有两处问题:
在 digital 函数中,计算 sum 时使用了
digital(i) + digital(i)
,应该改为digital(i) + digital(j)
。在 backtrace 函数中,对 grid 进行赋值的语句应该被注释掉,因为在接下来的递归调用中会覆盖这些赋值。应该将注释部分的代码删除。
修正后的代码如下:
class Solution {
public:
int digital(int x) {
if (x == 100) return 1;
int sum = x / 10 + x % 10;
return sum;
}
void backtrace(int i, int j, int cnt, vector<vector<bool>>& grid, int m, int n) {
if (i >= m || j >= n) return;
if ((digital(i) + digital(j)) > cnt) {
return;
}
// 不需要对 grid 进行赋值
// grid[i][j] = true;
if ((i + 1) < m)
backtrace(i + 1, j, cnt, grid, m ,n);
if (((j + 1) < n))
backtrace(i, j + 1, cnt, grid, m, n);
}
int wardrobeFinishing(int m, int n, int cnt) {
vector<vector<bool>> grid(m, vector<bool>(n));
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
grid[i][j] = false;
}
}
backtrace(0, 0, cnt, grid, m ,n);
int result = 0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (grid[i][j] == true)
result++;
}
}
return result;
}
};
修正后的代码应该能够正确运行了。
内容由零声教学AI助手提供,问题来源于学员提问