LeetCode874 模擬行走機械人

2021-10-03 04:53:42 字數 1359 閱讀 3489

機械人在乙個無限大小的網格上行走,從點 (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) 處

首先,對於障礙物,因為要經常地查詢下乙個位置是否有障礙物,所以就用乙個hashset 將所有的障礙物位置存進去;

由於座標位置是二維存在的,需要進行降維處理,可以將橫縱座標都轉為字串,然後在中間加個短橫線隔開,如此就可以把二維座標變為乙個字串了;

然後,就是處理所有的命令了,在傳統的迷宮遍歷中,通常使用方向陣列來控制遍歷的方向,這裡也是同樣需要的;

但不同的是,本題地方向順序也是有講究的,因為機械人初始狀態是朝北的,所以方向陣列的第乙個應該是朝北走,上北下南左西右東,這樣方向陣列的順序應該是上右下左。

再次,用乙個變數 idx 來表示方向陣列中的當前座標,當遇到 -1,即右轉時,idx 自增1即可,為了防止越界,需要對4取餘;

同理,當遇到 -2,即左轉時,idx 自減1即可,同樣為了防止越界,先加4,再對4取餘;

其次,當遇到正數命令時,此時就是前進,用兩個變數x和y分別表示當前位置的橫縱座標且初始化為0,分別加上方向陣列中對應位置的值,即就是下乙個位置的座標;

最後,本題重要的是看有沒有障礙物,到 hashset 中去查詢,若沒有障礙物,則可以到達,同時更新x和y為新的位置,繼續 while 迴圈即可;

當每個命令執行完了之後,用當前的x和y距離原點的距離更新乙個結果 res 即可。

class

solution

, diry

;for

(int command : commands)

} res =

max(res, x * x + y * y);}

return res;}}

;

Leetcode 874 模擬行走機械人

如果機械人試圖走到障礙物上方,那麼它將停留在障礙物的前乙個網格方塊上,但仍然可以繼續該路線的其餘部分。返回從原點到機械人的最大歐式距離的平方。示例 1 輸入 commands 4,1,3 obstacles 輸出 25解釋 機械人將會到達 3,4 示例 2 輸入 commands 4,1,4,2,4...

leetcode 874 模擬行走機械人

機械人在乙個無限大小的網格上行走,從點 0,0 處開始出發,面向北方。該機械人可以接收以下三種型別的命令 在網格上有一些格仔被視為障礙物。第i個障礙物位於網格點 obstacles i 0 obstacles i 1 如果機械人試圖走到障礙物上方,那麼它將停留在障礙物的前乙個網格方塊上,但仍然可以繼...

leetcode 874 模擬行走機械人

機械人在乙個無限大小的網格上行走,從點 0,0 處開始出發,面向北方。該機械人可以接收以下三種型別的命令 在網格上有一些格仔被視為障礙物。第i個障礙物位於網格點 obstacles i 0 obstacles i 1 如果機械人試圖走到障礙物上方,那麼它將停留在障礙物的前乙個網格方塊上,但仍然可以繼...