'''
Author: 365JHWZGo
Description: 55. Jump Game
Date: 2021-10-25 09:02:58
FilePath: \Python\test\greedy-5.py
LastEditTime: 2021-10-25 14:12:56
LastEditors: 365JHWZGo
'''
思路
class Solution(object):
def canJump(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
#核心算法:贪心算法
#观察:但凡能到达最后一位的,一定有nums[i]+i>=len(nums)-1成立
#边界值条件,判断跳的步数是否能到达该位置
#情况一:到达可跳的最大位置时,该位置可跳的步数为0,则返回False
#情况二:到达可跳的最大位置时,该位置可跳的步数不为0,则重新赋值下一次可跳的最大位置,或者发现新的可跳最大位置则更新
#情况三:在到达可跳的最大位置之前,该位置有可跳步数可直接到达终点
if len(nums) == 1 and nums[0] == 0:
return True
#当其中均为正数时,则一定可以到达
if 0 in nums:
#t为指针,代表目前最远能到达的位置
t = nums[0]
for i in range(len(nums) - 1):
#情况三:
if i <= t and nums[i] + i >= len(nums) - 1:
return True
#情况一:
if t==i and nums[i]==0:
return False
#情况二:
if t < nums[i]+i or i==t:
t = nums[i]+i
return False
else:
return True