分析:这和剑指offer12基本是一个思路的题目,暴力回溯就完事了,不过可以只往一个方向去做,比如每个状态只往右和下,就没有必要往左和上了,因为反正也计过数了,代码如下所示:
class Solution {
public:
int movingCount(int m, int n, int k) {
vector<vector<bool>> visited(m,vector<bool>(n,false));
int num=dfs(visited,0,0,m,n,k);
return num;
}
int dfs(vector<vector<bool>> &visited,int x,int y,int &m,int &n,int &k)
{
if(x<0||y<0||x>=m||y>=n||(x/10+x%10+y/10+y%10)>k||visited[x][y])
{
return 0;
}
visited[x][y]=true;
return dfs(visited,x+1,y,m,n,k)+dfs(visited,x,y+1,m,n,k)+1;
}
};
结果如下所示: