機械人在乙個無限大小的網格上行走,從點 (0, 0) 處開始出發,面向北方。該機械人可以接收以下三種型別的命令:
在網格上有一些格仔被視為障礙物。
第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) 處這道題,被劃分為貪心演算法的範疇,其實我感覺跟貪心演算法的關心真的不大,只是有個提前結束的條件,這就算是貪心演算法,真的太過分了。
這道題的難點主要有兩個,乙個是方向的問題,乙個是怎麼處理機械人運動到障礙物上的情況。
另外,為了加快執行速度,需要將障礙物的資訊放入set中,如果使用陣列或者列表,那麼速度將會變得非常慢。
class solution
public int robotsim(int commands, int obstacles)
int index = ;
int direction_table = , , , }; // 0表示y正半軸,1表示x正半軸,2表示y負半軸,3表示x負半軸
int direction_int = 0;
int direction = direction_table[direction_int];
int distance_max = 0;
for( int command : commands )
else if(command == -2)
direction = direction_table[direction_int];
}else}}
if( distance_max < distance(index) )
}return distance_max;
}}
四. 引用
leetcode:
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 如果機械人試圖走到障礙物上方,那麼它將停留在障礙物的前乙個網格方塊上,但仍然可以繼...
LeetCode874 模擬行走機械人
機械人在乙個無限大小的網格上行走,從點 0,0 處開始出發,面向北方。該機械人可以接收以下三種型別的命令 2 向左轉 90 度 1 向右轉 90 度 1 x 9 向前移動 x 個單位長度在網格上有一些格仔被視為障礙物。第 i 個障礙物位於網格點 obstacles i 0 obstacles i 1...