Re: [閒聊] 每日leetcode
看板Marginalman作者enmeitiryous (enmeitiryous)時間1年前 (2024/09/04 09:37)推噓1(1推 0噓 1→)留言2則, 2人參與討論串803/1548 (看更多)
題目: 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;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.227.201.58 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1725413856.A.F64.html
→
09/04 09:38,
1年前
, 1F
09/04 09:38, 1F
推
09/04 10:55,
1年前
, 2F
09/04 10:55, 2F
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 803 之 1548 篇):