遍历整个nums数组,用nex表示从当前位置能跳到的最远距离,如果能够跳到的最远距离nex大于之前能跳到的最远距离far,那么就更新far和nex之间所有位置的跳跃次数dp[j]=dp[i]+1,并更新far。最后返回dp[l-1]即可。emmm,算是一道简单的dp了。
import numpy as np
class Solution:
def jump(self, nums: List[int]) -> int:
l = len(nums)
dp = np.zeros(l)
dp[0] = 0
far = 0 #目前已到达的最远距离
for i in range(l):
nex = i+nums[i]
if nex > far: #只更新还没到达过的位置
for j in range(far+1, nex+1):
if j < l:
dp[j] = dp[i]+1
# print(dp[j], " ",j)
far = nex
return int(dp[l-1])