前往
大廳
主題

LeetCode - 2087. Minimum Cost Homecoming of a Robot in a Grid 解題心得

Not In My Back Yard | 2022-05-24 12:00:07 | 巴幣 12 | 人氣 199

題目連結:


題目意譯:
現在有一個 m × n 的網格,其中 (0, 0) 為其左上角格子且 (m - 1, n - 1) 為其右下角格子。你被給定一整數陣列 startPos,其中 startPos = [startrow, startcol] 代表著一開始有一機器人位於格子 (startrow, startcol)。你同時也被給定另一整數陣列 homePos,其中 homePos = [homerow, homecol] 代表著機器人的家位於格子 (homerow, homecol)。

機器人現在需要回到他的家。他可以朝四個方向移動一格格子:左、右、上或是下之方向,且他不得走出邊界。每次移動將附有成本。你接著又被給定兩個索引值從 0 開始的整數陣列,一為長度為 m 的 rowCostsM,和另一長度為 n 的 colCosts。

如果機器人向上或下移動到的格子之列數為 r,則此次移動成本為 rowCosts[r]。
如果機器人向左或右移動到的格子之列數為 c,則此次移動成本為 colCosts[c]。

回傳這個機器人回到家最少所需要的成本。

限制:
m == rowCosts.length
n == colCosts.length
1 ≦ m, n ≦ 10 ^ 5
0 ≦ rowCosts[r], colCosts[c] ≦ 10 ^ 4
startPos.length == 2
homePos.length == 2
0 ≦ startrow, homerow < m
0 ≦ startcol, homecol < n



範例測資:
範例 1:
輸入: startPos = [1, 0], homePos = [2, 3], rowCosts = [5, 4, 3], colCosts = [8, 2, 6, 7]
輸出: 18
解釋: 其中一條最佳路徑為:
開始於 (1, 0)
→ 他往下走到 (2, 0)。本次移動成本為 rowCosts[2] = 3。
→ 他往右走到 (2, 1)。本次移動成本為 colCosts[1] = 2。
→ 他往右走到 (2, 2)。本次移動成本為 colCosts[2] = 6。
→ 他往右走到 (2, 3)。本次移動成本為 colCosts[3] = 7。
總成本為 3 + 2 + 6 + 7 = 18

範例 2:
輸入: startPos = [0, 0], homePos = [0, 0], rowCosts = [5], colCosts = [26]
輸出: 0
解釋: 機器人已經在家了。而由於沒有做出任何移動,因此總成本為 0。


解題思維:
由於每一格 rowCosts 、 colCosts 的成本皆為非負的。因此如果原地上上下下或是左右左右的來回移動,其成本只會增加不會減少。

所以可以看到機器人想要以最低成本到家的話,他就必須走最短路徑。例如說機器人在 (2, 7) 、 家在 (3, 2) 的話,就代表著機器人應往右一格 + 往上五格。而我們可以看到由於成本只會看行或是看列,而不是單看格子,因此不管是先往右再往上還是先往上再往右,成本之值都是一樣的。

因此,我們只需加總這個最短路徑上的行、列之成本即是所求。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作