leetcode20200417每日一题-55.跳跃游戏

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则看看前面元素有没有可以越过他的。

冲冲冲~

发布了18 篇原创文章 · 获赞 1 · 访问量 790

猜你喜欢

转载自blog.csdn.net/shuaishuaihyh/article/details/105578446