题解 | #跳跃游戏(一)# Python3
跳跃游戏(一)
https://www.nowcoder.com/practice/07484f4377344d3590045a095910992b
import sys # 方法一: O(NN),超时 # dp[i] = 能否跳到i # dp[i] = (j从0~i-1, dp[j]==1 & nums[j]>= (i-j)) n = int(input()) nums = list(map(int, input().strip().split())) # dp = [False] * (n) # dp[0] = True # for i in range(1,n): # for j in range(i): # if dp[j] and nums[j] >= (i-j): # dp[i] = True # break # print('true' if dp[-1] else 'false') # 方法二, dp[i]为在i还能跳往后到达多少格, # 如何dp[i]==0,说明无法再向后跳了 # dp[i] = max(dp[i-1]-1,nums[i]) # dp[i] dp = [0] * (n+1) flag = True for i in range(1,n+1): dp[i] = max(dp[i-1]-1, nums[i-1]) if dp[i] == 0 and i!=n: # 最后一个不需要往后跳,已经到达 flag = False break print('true' if flag else 'false') # 方法三,注意,如果能到达i,一定能到达i-1 # 因此,可以采用贪心策略,从后往前遍历数组,迭代看当前位置+值能否到达目的位置,可以的话,只需要到达当前位置 # 就可以到达最后的目的位置