leetcode874
生活随笔
收集整理的這篇文章主要介紹了
leetcode874
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這道題直接按照題意來解,建立坐標系和移動方案,思路是比較簡單的。只是需要注意需要使用set來判斷是否遇到障礙,否則會超時。
int robotSim(vector<int>& commands, vector<vector<int>>& obstacles) {int N = commands.size();int M = obstacles.size();//向上 Wx=0,Wy=1//向左 Wx=-1,Wy=0//向下 Wx=0,Wy=-1//向右 Wx=1,Wy=0set<pair<int, int>> st;for (auto &obs : obstacles){st.insert(make_pair(obs[0], obs[1]));}int Wx = 0;int Wy = 1;int Px = 0;int Py = 0;int maxdistance = 0;for (int i = 0; i < N; i++){int cmd = commands[i];//當前指令 if (cmd == -2)//左轉 {if (Wx == 0 && Wy == 1)//上-->左 {Wx = -1;Wy = 0;}else if (Wx == -1 && Wy == 0)//左-->下 {Wx = 0;Wy = -1;}else if (Wx == 0 && Wy == -1)//下-->右 {Wx = 1;Wy = 0;}else if (Wx == 1 && Wy == 0)//右-->上 {Wx = 0;Wy = 1;}}else if (cmd == -1)//右轉 {if (Wx == 0 && Wy == 1)//上-->右 {Wx = 1;Wy = 0;}else if (Wx == -1 && Wy == 0)//左-->上 {Wx = 0;Wy = 1;}else if (Wx == 0 && Wy == -1)//下-->左 {Wx = -1;Wy = 0;}else if (Wx == 1 && Wy == 0)//右-->下 {Wx = 0;Wy = -1;}}else//移動 1<=x<=9 {//此次移動之前的起點位置為Px和Pyint Tmpx = Px;int Tmpy = Py;while (cmd > 0){//以(Wx,Wy)為步進,移動一次Tmpx += Wx;Tmpy += Wy;if (st.find(make_pair(Tmpx, Tmpy)) != st.end()){Tmpx -= Wx;Tmpy -= Wy;cmd = 0;}cmd--;}int distance = Tmpx*Tmpx + Tmpy*Tmpy;if (maxdistance < distance){maxdistance = distance;}Px = Tmpx;Py = Tmpy;}}return maxdistance; }?
轉載于:https://www.cnblogs.com/asenyang/p/9692927.html
總結
以上是生活随笔為你收集整理的leetcode874的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员的写作课:三、 海量信息输入指南
- 下一篇: 转载:Systemd 命令