题目给定一个整数列表,列表的每个数字表示这个位置可以往后跳的距离,判断给定列表从第一个元素是否可以跳到最后一个数字。
解决这个问题我用的方法是从后面往前遍历列表的方法。一开始的目的地位置是des = n-1,从倒数第二个(即n-2)开始,如果这个位置大于0,说明至少可以移动一个位置,可以到达des,那么只要前面部分可以到达倒数第二个位置,自然可以到达最后一个位置,之后都是类似的方法进行下去。一旦遇到0,那么说明这里不能通过,需要在0前面找到数字可以直接跨过0跳到当前des位置,然后才能更新des,更新后的des一定可以到达最后一个位置,遍历玩一遍列表后就可以判断出能不能到达最后一个位置了。代码:
class Solution:
def canJump(self, nums):
n = len(nums)
des = n - 1 #目的地是倒数第一个,位置为n-1
zero = 0
for i in range(n-2 , -1, -1): #从倒数第二个开始判断
if zero == 0 and nums[i] == 0: #之前没有被0阻隔。但是遇到0了
des = i + 1
zero = 1
elif zero == 1: #被0阻拦下来
if des-i <= nums[i]: #如果这个数字可以跨过0到达位置des
des = i
zero = 0
else: #没有0阻拦并且遇到的不是0,des更新
des = i
return zero == 0 #判断到达第一个数字时中间有没有被0中断