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