使用贪心算法,设置每一步能够跳跃的起始位置和结束位置,计算每一步最远可以达到的位置,如果当前这一步能够走完数组就返回True,如果走完了所有的数组,都没有达到最远的位置,则返回False,在跳跃的过程中,如果当前跳跃的起始位置与结束位置相等,则表示当前位置是能达到的最远位置,比如[0, 1],从第一个位置,只能跳到第一个位置。
class Solution(object):
def canJump(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
s = 0 # 起始位置
e = 1 # 结束位置
mot = 0
while s <= len(nums)-1:
for i in range(s, e):
mot = max(mot, i + nums[i]) # 计算每一步能够达到的最远位置
if mot >= len(nums)-1: # 最远位置能够走完则返回Ture
return True
s = e # 上一步的结束位置,就是下一步的开始位置
e = mot + 1 # 结束位置是当前能够达到的最远位置+1
if s == e: # 如果起始位置和结束位置相等,则表示当前位置是能达到的最远位置。
return False
if e < len(nums): # 走完全程都没有达到边界,则返回False
return False
else: # 否则返回True
return True