这个题目就是不需要回溯,所以不需要恢复现场
C++ 代码
class Solution {
public:
int movingCount(int threshold, int rows, int cols)
{
vector<vector<bool>> vis(rows, vector<bool>(cols));
return dfs(threshold, 0, 0, vis);
}
int dfs(int th, int i, int j, vector<vector<bool>> &vis){
if(i < 0 || i >=vis.size() || j < 0 || j >= vis[i].size() || vis[i][j] ||(i/10+i%10+j/10+j%10)>th) return 0;
//这里只需要往前走就行了,不需要回溯,所以不用回复出场
vis[i][j]=true;
return dfs(th,i+1, j, vis)+dfs(th,i-1, j, vis)+dfs(th,i, j-1, vis)+dfs(th,i, j+1, vis) + 1;
}
};