1.题目
2.题目意思
就是能不能到最后一格。简单分析,除了最后一个数,其他数要是不等于0就一定可以到;如果中间有0,只要前面有数能跨过去,就也行。
3.代码
解法1:
class Solution:
def canJump(self, nums: List[int]) -> bool:
start = 0
end = 0
n = len(nums)
while start <= end and end < len(nums) - 1:
end = max(end, nums[start] + start)
start += 1
return end >= n - 1
思路:双指针
从前往后遍历,start
表示遍历到哪个数,end
表示遍历到当前数,最多可以到哪。所以start<=end
。当end>len(nums)-1
时,说明可以到达列表末尾,就可以结束循环了。
解法2:
class Solution:
def canJump(self, nums: List[int]) -> bool:
if len(nums) <2:
return True
if 0 not in nums:
return True
i = len(nums)-2
while i != -1:
if nums[i] == 0:
for k in range(i-1, -1, -1):
if k + nums[k]>i:
i = k
break
else:
return False
else:
i-=1
return True
思路:单指针
从后往前,从倒数第二个开始,看看有没有0,有0则看看前面元素有没有可以越过他的。
冲冲冲~