https://leetcode-cn.com/problems/ji-qi-ren-de-yun-dong-fan-wei-lcof/
BFS
注需要注意的是满足要求(行左边+列坐标位数<=k)不一定可达,即被不可达方格包围的解不应该计算在内,与代码中注释部分对所有row + col位数之和<=k的方格全部计算在内的实现进行对比
class Solution { //BFS
public:
int count = 0;
int movingCount(int m, int n, int k) {
vector<vector<int>> flag(m, vector<int> (n, 0));
helper(m, n, k, 0, 0, flag);
return count;
}
private:
void helper(int m, int n, int k, int row, int col, vector<vector<int>> &flag) {
if(row >= 0 && row < m && col >= 0 && col < n &&
flag[row][col] != 1 && check(row, col) <= k) {
count++;
flag[row][col] = 1;
//只需向右下方搜索即可
helper(m, n, k, row + 1, col, flag);
helper(m, n, k, row, col + 1, flag);
}
/*
//访问所有的方格,不管符合要求(行左边+列坐标位数<=k)是否可达
//即将不可达方格包围的解也计算在内
if(row >= 0 && row < m && col >= 0 && col < n && flag[row][col] != 1) {
if(check(row) + check(col) <= k)
count++;
flag[row][col] = 1;
helper(m, n, k, row + 1, col, flag);
helper(m, n, k, row, col + 1, flag);
}
*/
return ;
}
int check(int m) {
int sum = 0;
while(m) {
sum += m % 10;
m /= 10;
}
return sum;
}
};