leetcode 55.跳躍遊戲

給定一個非負整數數組,你最初位於數組的第一個位置。數組

數組中的每一個元素表明你在該位置能夠跳躍的最大長度。spa

判斷你是否可以到達最後一個位置。code

示例 1:blog

輸入: [2,3,1,1,4]
輸出: true
解釋: 從位置 0 到 1 跳 1 步, 而後跳 3 步到達最後一個位置。

示例 2:索引

輸入: [3,2,1,0,4]
輸出: false
解釋: 不管怎樣,你總會到達索引爲 3 的位置。但該位置的最大跳躍長度是 0 , 因此你永遠不可能到達最後一個位置。

 

這個題記憶化搜索都會炸,呵呵。it

class Solution:

    def __init__(self):
        self.ans = False
        self.vis = [ False for _ in range(1000000)]
        self.vis[0] = True
    def canJump(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """
        def dfs(pos):
            if pos == len(nums) - 1 :
                self.ans = True

            for i in range(nums[pos],0,-1):
                if self.ans == True:
                    break
                if pos+i < len(nums):
                    if not self.vis[pos+i]:
                        self.vis[pos+i] = True
                        dfs(pos+i)
                        self.vis[pos+i] = False

        dfs(0)
        return self.ans

 

貪心大法:io

維護可以到達的最遠位置,注意前面的都要可以到達,不然這個想法就不對了。對於第一個位置,就是前面的都能到達。class

class Solution:
    def canJump(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """
        max_pos = 0
        for i in range(len(nums)):
            if i > max_pos:
                return False
            max_pos = max(max_pos, i+nums[i])
        return max_pos >= len(nums)-1
相關文章
相關標籤/搜索