前往
大廳
主題

LeetCode - 1269. Number of Ways to Stay in the Same Place After Some Steps 解題心得

Not In My Back Yard | 2024-03-29 12:00:11 | 巴幣 0 | 人氣 32

題目連結:


題目意譯:
你有著一個指標位於一個大小為 arrLen 的索引值 0。在每一步中,你可以往左或往右一個位置,或是待在同一個位置(該指標在任何時刻都不得超出陣列的範圍)。

給定兩整數 steps 和 arrLen,回傳你的指標在恰好 steps 步之後依舊位於索引值 0 的方法數。由於答案可能太大,先將其模 10 ^ 9 + 7 回傳。

限制:
1 ≦ steps ≦ 500
1 ≦ arrLen ≦ 10 ^ 6



範例測資:
範例 1:
輸入: steps = 3, arrLen = 2
輸出: 4
解釋: 此例中有 4 種方式在 3 步後依舊待在索引值 0:
右、左、待在原地
待在原地、右、左
右、待在原地、左
待在原地、待在原地、待在原地

範例 2:
輸入: steps = 2, arrLen = 4
輸出: 2
解釋: 此例中有 2 種方式在 2 步後依舊待在索引值 0:
右、左
待在原地、待在原地

範例 3:
輸入: steps = 4, arrLen = 2
輸出: 8


解題思維:
定義一個二維陣列 D,其中 D[i][j] 代表著當現在指標位於索引值 i 時,用剩下的 j 步走回到索引值 0 的方法數為何。

可以看到其遞迴式為:
    D[0][0] = 1、
    D[i][0] = 0,其中 i != 0、
    D[i][j] = 0,其中 i < 0 或 i ≧ arrLen、
    (上面三式為遞迴停止條件)
    D[i][j] = D[i - 1][j - 1] + D[i][j - 1] + D[i + 1][j - 1],其中 0 ≦ i < arrLen 且 j 為任意非負整數。

最後從 D[0][steps] 開始遞迴求解即可。不過當然,請記得在運算過程中時常模 10 ^ 9 + 7 並且算過的 D[i][j] 就不要重複算了,直接挪用即可。




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

創作回應

更多創作