max_i = 0 #初始化当前能到达最远的位置
for i, jump in enumerate(nums): #i为当前位置,jump是当前位置的跳数
if max_i>=i and i+jump>max_i: #如果当前位置能到达,并且当前位置+跳数>最远位置
max_i = i+jump #更新最远能到达位置
return max_i>=i
不断获取最大位置
max_i > i 表示经过最初的更新,可以达到的位置能够超过这个i
可以调的最大位置
参考链接
动态规划解法
dp = [False]*len(nums)
dp[0] = True
for i in range(1,len(nums)):
if dp[i-1] == False: # 左侧不可达,则直接False
dp[i] = False
elif nums[i-1] == 0: # i-j == 0表示不能到下一步
for j in range(i-1,-1,-1): # 此时要往前推
if nums[j] >= i - j:
dp[i] = True
print(j,i)
break
else:
dp[i] = True # 如果 i-1 不止一步的话,直接下一步
return dp[-1]