我一开始认为这是一道DP的题目。其实,可以维护一个maxReach,并对每个元素更新这个maxReach = max(maxReach, i + nums[i])。注意如果 i>maxReach,说明从起点开始能跳到的最远距离不到i, 所以i后面的点也就无法到达了。另外如果 maxReach >= n-1 说明已经可以跳到终点了,之后的点也就不用继续检查了。
1 class Solution(object): 2 def canJump(self, nums): 3 """ 4 :type nums: List[int] 5 :rtype: bool 6 """ 7 n = len(nums) 8 maxReach = 0 9 10 for i in range(n): 11 if i>maxReach or maxReach >= n-1: 12 break 13 maxReach = max(maxReach, i+nums[i]) 14 15 if maxReach < n-1: 16 return False 17 else: 18 return True
原文:http://www.cnblogs.com/lettuan/p/6256236.html