[力扣]第55题- 跳跃游戏[动态规划]

[力扣]第55题- 跳跃游戏[动态规划]

本题的难度较低,需要考虑的情况比较少。
答案:


class Solution:
    def canJump(self, nums) -> int:
        length=len(nums)
        if length == 1: return True #判断当前输入的数字是否只有一个元素(无法跳跃),直接返回True
        if nums[0]==0:return False #判断当前数组的第一个数字是否是0,直接返回False
        zero_index=[]#遍历一遍,获取0的下标
        for index,numb in enumerate(nums):
            zero_index.append(index) if numb==0 else None
        for i in zero_index:#找到每一个0的位置,往前遍历,查看是否有可以跃过这个0的数字
            for index,numb in enumerate(nums[0:i]):#往前遍历
                if index+numb>i or i==length-1:break#能够跃过,跳出循环
                if index==i-1:return False#不能够跃过,直接返回FALSE
        return True
           

首先进行分析,直接使用暴力法一定会超时。那么仔细观察,发现只有出现数字“0”的时候,才有可能无法跃过数字“0”。因此首先遍历数组,获取每一个数字0的下标(这一步实际上可以和后面的搜索集成在一起,避免多遍历一次数组),随后索引每一个0在数组中的位置,向前查找是否存在能够跃过这个0的数字,如果不存在则返回FALSE,循环结束后返回True

执行用时:
132 ms, 在所有 Python3 提交中击败了17.68%的用户
内存消耗:15.9 MB, 在所有 Python3 提交中击败了32.70%的用户
通过测试用例:169 / 169

你可能感兴趣的:(力扣记录,leetcode,算法,职场和发展)