class Solution {
public:
typedef pair<int,int>PII;
int get_single_sum(int x)
{
int s=0;
while(x)s+=x%10,x/=10;//求下标和
return s;
}
int get_sum(PII p)
{
return get_single_sum(p.first)+get_single_sum(p.second);
}
int movingCount(int k, int n, int m)
{
if(!n||!m)return 0;
int res=0;
vector<vector<bool>>rec(n,vector<bool>(m,false));
queue<PII>q;
q.push({0,0});
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
while(q.size())
{
auto t=q.front();
q.pop();
if(get_sum(t)>k||rec[t.first][t.second])continue;//判断是否遍历过或者不满足条件
res++;
rec[t.first][t.second]=true;
for(int i=0;i<4;i++)
{
int a=t.first+dx[i],b=t.second+dy[i];
if(a>=0&&a<n&&b>=0&&b<m)//判一下边界即可
q.push({a,b});
}
}
return res;
}
};
ACwing 24. 机器人的运动范围
最新推荐文章于 2023-08-04 10:31:45 发布