Leetcode874.Walking Robot Simulation模擬行走的機器人
阿新 • • 發佈:2018-12-20
機器人在一個無限大小的網格上行走,從點 (0, 0) 處開始出發,面向北方。該機器人可以接收以下三種類型的命令:
- -2:向左轉 90 度
- -1:向右轉 90 度
- 1 <= x <= 9:向前移動 x 個單位長度
在網格上有一些格子被視為障礙物。
第 i 個障礙物位於網格點 (obstacles[i][0], obstacles[i][1])
如果機器人試圖走到障礙物上方,那麼它將停留在障礙物的前一個網格方塊上,但仍然可以繼續該路線的其餘部分。
返回從原點到機器人的最大歐式距離的平方。
示例 1:
輸入: commands = [4,-1,3], obstacles = [] 輸出: 25 解釋: 機器人將會到達 (3, 4)
示例 2:
輸入: commands = [4,-1,4,-2,4], obstacles = [[2,4]] 輸出: 65 解釋: 機器人在左轉走到 (1, 8) 之前將被困在 (1, 4) 處
提示:
- 0 <= commands.length <= 10000
- 0 <= obstacles.length <= 10000
- -30000 <= obstacle[i][0] <= 30000
- -30000 <= obstacle[i][1] <= 30000
- 答案保證小於 2 ^ 31
題目感覺沒有說清楚,應該說是過程中最大的歐式平方
class Solution { public: int robotSim(vector<int>& commands, vector<vector<int> >& obstacles) { map<pair<int, int>, bool> check; for(int i = 0; i < obstacles.size(); i++) { check[make_pair(obstacles[i][0], obstacles[i][1])] = true; } //北東南西 int dir = 0; int res = 0; int currentx = 0; int currenty = 0; int dx[4] = {0, 1, 0, -1}; int dy[4] = {1, 0, -1, 0}; for(int i = 0; i < commands.size(); i++) { if(commands[i] == -1) { dir = (dir + 1) % 4; } else if(commands[i] == -2) { dir = (dir + 4 - 1) % 4; } else { int step = commands[i]; for(int i = 0; i < step; i++) { int newx = currentx + dx[dir]; int newy = currenty + dy[dir]; if(check[make_pair(newx, newy)] == false) { currentx = newx; currenty = newy; res = max(res, currentx * currentx + currenty * currenty); } } } } return res; } };