这道题耗费了我特别多特别多的时间。。。。。还没有弄出来,只是弄出来一个超时版本,搬出来纪念一下:
Code:
class Solution(object):
def canJump(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
le=len(nums)
if le==0: return False
if le==1: return True
if sum(nums[:-1])<le-1: return False
i=nums[0]
while(True):
if i>=le-1:
return True
elif nums[i]==0:
for k in range(1,nums[i]):
if nums[i-k]!=k:
i-=k
break
else:
if k==nums[i]-1:
return False
else: continue
else:
i+=nums[i]
正确版本:
Key:作者的思路非常的巧妙,用到了一个概念:当前可到达最远处,且它是在不断实时更新的;我觉得这道题值得回味无穷,多啃几遍才能啃到其中的精髓所在~~~
Code:
class Solution(object):
def canJump(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
current_reachable_max_len=0
for i in range(len(nums)):
if current_reachable_max_len<i:
return False
current_reachable_max_len=max(current_reachable_max_len,i+nums[i])
if current_reachable_max_len>=len(nums)-1:
return True
return False