class Solution {
public:
bool coordinateCount(int x,int y,int k){ //计算坐标各位和是否满足<k
string s=to_string(x)+to_string(y);
int sum=0,len=s.length();
for(int i=0;i<len;++i)
sum+=s[i]-'0';
if(sum<=k) return true;
else return false;
}
int movingCount(int m, int n, int k) {
vector<vector<bool>>visit(m,vector<bool>(n,false));
return dfs(m,n,0,0,k,visit);
}
private:
int dfs(int m,int n,int x,int y,int k,vector<vector<bool>>&visit) { //从x,y开始访问方格内符合要求的个数
if(x>=m||y>=n||x<0||y<0) return 0; //越界直接返回
else if(visit[x][y]||!coordinateCount(x,y,k)) return 0; //已经计算过或者不符合要求
else{
visit[x][y]=true; //标记访问过
return 1+dfs(m,n,x+1,y,k,visit)+dfs(m,n,x-1,y,k,visit)+dfs(m,n,x,y+1,k,visit)+dfs(m,n,x,y-1,k,visit);
//return 1+dfs(m,n,x+1,y,k,visit)+dfs(m,n,x,y+1,k,visit); 从左上角开始,向右和向下搜索即可
}
}
};
剑指 Offer 13. 机器人的运动范围
于 2022-05-09 10:47:27 首次发布