1. 程式人生 > >跳躍遊戲 python實現

跳躍遊戲 python實現

題目描述

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

陣列中的每個元素代表你在該位置可以跳躍的最大長度。

判斷你是否能夠到達最後一個位置。

示例 1:

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

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

解題思路

這位播主寫的很好,講解了使用動態規劃,和貪婪演算法兩種解法(這裡感慨一下:貪婪演算法,我已經基本快想出來了,只要稍微改變一下就OK了,可是最後還是忍不住看了答案。。。。遺憾,所以大家在刷題目的時候碰到不會的,多給自己一點時間)

python程式碼實現

class Solution:
    @staticmethod
    def canJump_greedy(nums):
        """
        使用貪心演算法求解   https://blog.csdn.net/shinanhualiu/article/details/50550825
        max_arrived表示的是截至到i位置所能到達的最遠距離
        :type nums: List[int]
        :rtype: bool
        """
        len_nums=len(nums)
        max_arrived=
0 for i,num in enumerate(nums): if i==0: max_arrived=i+num elif max_arrived>=i: max_arrived=(max(i+num,max_arrived)) else: return False if max_arrived>=len_nums-1: return True return
False @staticmethod def canJump_dp(nums): """ 使用動態規劃求解 https://blog.csdn.net/shinanhualiu/article/details/50550825 dp[i]表示的是截至到i位置所能到達的最遠距離 :type nums: List[int] :rtype: bool """ len_nums=len(nums) dp=[] for i,num in enumerate(nums): if i==0: dp.append(i+num) elif dp[i-1]>=i: dp.append(max(i+num,dp[i-1])) else: dp.append(0) if dp[i]>=len_nums-1: return True return False