题目描述
解法一:DFS/BFS
详细参考 面试题13. 机器人的运动范围( DFS / BFS ,清晰图解)
解法二:递推
v i s [ i ] [ j ] = v i s [ i − 1 ] [ j ] o r v i s [ i ] [ j − 1 ] vis[i][j]=vis[i−1][j] \ or\ vis[i][j−1] vis[i][j]=vis[i−1][j] or vis[i][j−1],初始时 v i s [ i ] [ j ] = 1 vis[i][j] = 1 vis[i][j]=1
注意判断不可到达点和边界就好了
class Solution {
public:
int get(int x){
int res = 0;
while(x>0)
{
res += x%10;
x /= 10;
}
return res;
}
int movingCount(int m, int n, int k) {
if(!k) return 1;
vector<vector<int>> vis(m, vector<int>(n, 0));
int ans = 1;
vis[0][0] = 1;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if((i==0 && j==0) || (get(i)+get(j)>k)) continue;
if(j-1>=0) vis[i][j] |= vis[i][j-1];
if(i-1>=0) vis[i][j] |= vis[i-1][j];
ans += vis[i][j];
}
}
return ans;
}
};