方法一:逆序遍历
class Solution:
def canJump(self, nums: List[int]) -> bool:
last = len(nums)-1
for i in range(len(nums)-2,-1,-1):
if nums[i] >= last-i:
last = i
if last == 0:
return True
return False```
方法二:尽可能到达最远位置(贪心算法)
```python
class Solution:
def canJump(self, nums: List[int]) -> bool:
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
方法三:记录所有能到达的位置
class Solution:
def canJump(self, nums: List[int]) -> bool:
k = 0
for i in range(len(nums)):
if i > k:
return False
k = max(k, i + nums[i])
return True