55.跳跃游戏

给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。

思路一:如果数组元素为0,则可能无法到最后一个位置,所以判断能否跳过每个为0的位置

class Solution(object):
    def canJump(self, nums):
        if not 0 in nums:
            return True
        r = 0
        while r < len(nums):
            if nums[r]+r >= len(nums)-1:
                return True
            if nums[r] == 0:
                l = r
                while l>=0:
                    if nums[l]+l>r:
                        break
                    l-=1
                if l == -1:
                    return False
            r+=1
        return True

思路二:动规——从后往前遍历,依次标记每个元素是否可以到达最后一个位置

    def canJump(self, nums):
        if len(nums) < 2:
            return True
        num = len(nums)
        bool_list = [False] * num
        for index in range(num):
            i = num - index - 1
            if (i + nums[i]) >= (num - 1):
                bool_list[i] = True
            else:
                for j in range(1, nums[i]+1):
                    if bool_list[i+j]:
                        bool_list[i] = True
                        continue
        return bool_list[0]

思路三:判断第一个位置能否跳到能跳到最后一个位置的最前面的位置

    def canJump(self, nums):
        if len(nums) < 2:
            return True
        num = len(nums)
        end = num - 1
        start = end - 1
        while start > 0:
            if nums[start] + start >= end:
                end = start
            start -= 1
        return nums[start] + start >= end

你可能感兴趣的:(55.跳跃游戏)