題目連結:
題目意譯:
現在有一個 n × n 的網格,其左上角格子位於 (0, 0) 而右下角的格子則位於 (n - 1, n - 1)。你被給定一整數 n 以及一整數陣列 startPos,其中 startPos = [startrow, startcol] 代表著有一個機器人一開始位在格子 (startrow, startcol)。
你同時也被給定一個索引值從 0 開始數且長度為 m 的字串 s,其中 s[i] 為給機器人的第 i 個指令:'L'(向左移動)、'R'(向右移動)、'U'(向上移動)以及 'D'(向下移動)。
該機器人可以從任意 s[i] 開始(含)往後面執行。其將會往 s 的尾端依序執行各個指令,但是在以下條件之一滿足時,該機器人將會停止:
下一個指令即將把機器人移出網格;
沒有剩下的指令可以執行。
回傳一個長度為 m 的陣列 answer,其中 answer[i] 為如果機器人從 s[i] 開始往後執行指令,其可以執行的指令總數。
限制:
m == s.length
1 ≦ n, m ≦ 500
startPos.length == 2
0 ≦ startrow, startcol < n
s 由 'L' 、 'R' 、 'U' 和 'D' 組成。
範例測資:
範例 1:
輸入: n = 3, startPos = [0,1], s = "RRDDLU"
輸出: [1,5,4,3,1,0]
解釋: Starting from startPos and beginning execution from the ith instruction:
- 第 0: "RRDDLU"。直到將會移出網格為止,只有一個指令 "R" 會被執行。
- 第 1: "RDDLU"。五個指令會全數執行,並停在 (1, 1) 這個位置。
- 第 2: "DDLU"。四個指令會全數執行,並停在 (1, 0) 這個位置。
- 第 3: "DLU"。三個指令會全數執行,並停在 (0, 1) 這個位置。
- 第 4: "LU"。直到將會移出網格為止,只有一個指令 "L" 會被執行。
- 第 5: "U"。如果往上移動,則機器人將會移出網格。
範例 2:
輸入: n = 2, startPos = [1,1], s = "LURD"
輸出: [4,1,0,0]
解釋:
- 第 0: "LURD"。
- 第 1: "URD"。
- 第 2: "RD"。
- 第 3: "D"。
範例 3:
輸入: n = 1, startPos = [0,0], s = "LRUD"
輸出: [0,0,0,0]
解釋: 無論從哪一個指令開始,機器人都會移出網格。
解題思維:
因為 m 最大只有 500,因此直接以每一個 s[i] 作為起點模擬並紀錄機器人的位置即可。時間複雜度為 O(m ^ 2)。
降到 O(m) 是可行的,只是這部份就交給讀者思考。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。