Re: [闲聊] 每日leetcode

楼主: enmeitiryous (enmeitiryous)   2024-09-04 09:37:34
题目: 874 walking robot simulation
一个机器人起始在(0,0)并面向+y的方向,给你一串指令 commands,当coomands[i]=-1代
表向右转,-2代表向左转,否则代表朝面向方向走的距离,给你一个blockers座标vector
如果机器人的下一步存在该列表中则机器人原地停下,求在过程中最大的x**2+y**2
思路:
照做,先把blockers塞到一个set,每一次移动时看下一步是不是在blockers中,并记录
每一次移动完x**2+y**2需不需要更新
int robotSim(vector<int>& commands, vector<vector<int>>& obstacles) {
int curx=0;
int cury=0;
int ans=0;
set<vector<int>> blockers;
for(auto h: obstacles){
blockers.insert(h);
}
vector<vector<int>> godir={{0,1},{1,0},{0,-1},{-1,0}};
int nowdir=0;
for(auto j:commands){
if(j==-1){
nowdir=(nowdir+1)%4;
}
else if(j==-2){
nowdir=(nowdir+3)%4;
}
else{
for(int i=0;i<j;++i){
curx+=godir[nowdir][0];
cury+=godir[nowdir][1];
if(blockers.count({curx,cury})){
curx-=godir[nowdir][0];
cury-=godir[nowdir][1];
break;
}
}
ans=max(curx*curx+cury*cury,ans);
}
}
return ans;
}
作者: Smallsh (Smallsh)   2024-09-04 09:38:00
大师
作者: dont   2024-09-04 10:55:00
大师

Links booklink

Contact Us: admin [ a t ] ucptt.com