leetcode 跳躍遊戲 python3

2021-10-24 09:26:30 字數 1745 閱讀 9183

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

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

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

示例 1

:輸入:[2

,3,1

,1,4

]輸出:

true

解釋: 我們可以先跳 1 步,從位置 0 到達 位置 1

, 然後再從位置 1 跳 3 步到達最後乙個位置。

示例 2

:輸入:[3

,2,1

,0,4

]輸出:

false

解釋: 無論怎樣,你總會到達索引為 3 的位置。但該位置的最大跳躍長度是 0 , 所以你永遠不可能到達最後乙個位置。

思路:盡可能到達最遠位置(貪心)。

如果能到達某個位置,那一定能到達它前面的所有位置。

方法:初始化最遠位置為 0,然後遍歷陣列,如果當前位置能到達,並且當前位置+跳數》最遠位置,就更新最遠位置。最後比較最遠位置和陣列長度。

class solution:

def canjump

(self, nums: list[

int])-

>

bool

: k =

0for i in range

(len

(nums)):

if i > k :

return false

k =max(k,nums[i]

+i)return true

class solution:

def canjump

(self, nums: list[

int])-

>

bool

: dp=

[false]

*len

(nums)

dp[-1

]=true

index=

len(nums)-1

for i in range

(len

(nums)-2

,-1,

-1):

if index-i<=nums[i]

: index=i

dp[index]

=true

return dp[0]

99dong-tai-gui-hua-suan-fa-fu-za-du-o/

思路:動態規劃,如果能到最後乙個點,那麼必然有乙個從index=0 跳躍至index=len(nums)-1的過程。

演算法:首先,設定index為末尾節點index=len(nums)-1,然後從後往前遍歷輸入的列表,記索引為i,如果遍歷到的節點能跳躍至index節點,即nums[i]>=index-i,那麼重新設定index的值,index=i,並且i處的節點記錄為true。

模擬:[2,3,1,1,4] 可以看作從2->3->1->1->4,使用true表示經過的點,那麼我們可以用dp=[true,true,true,true,true]的列表表示經過的過程。

[2,3,1,1,4] 也可以看作2->1->1->4,那麼列表表示為dp=[true,false,true,true,true]

[3,2,1,0,4] 則看作dp=[false,false,false,false,true]

可以發現當dp[0]==true 時,表示該輸入是能夠到達末尾節點的。

LeetCode 跳躍遊戲

給定乙個非負整數陣列,你最初位於陣列的第乙個位置。陣列中的每個元素代表你在該位置可以跳躍的最大長度。判斷你是否能夠到達最後乙個位置。示例 1 輸入 2,3,1,1,4 輸出 true 解釋 從位置 0 到 1 跳 1 步,然後跳 3 步到達最後乙個位置。示例 2 輸入 3,2,1,0,4 輸出 fa...

leetcode 跳躍遊戲

給定乙個非負整數陣列,你最初位於陣列的第乙個位置。陣列中的每個元素代表你在該位置可以跳躍的最大長度。判斷你是否能夠到達最後乙個位置。示例 1 輸入 2,3,1,1,4 輸出 true 解釋 我們可以先跳 1 步,從位置 0 到達 位置 1,然後再從位置 1 跳 3 步到達最後乙個位置。示例二 輸入 ...

leetcode跳躍遊戲

1.從後往前遍歷 設陣列長度len a.size 該題判斷能否到達最後乙個位置即len 1。1 開始時,設目標點為len 1,從倒數第二個元素開始往前遍歷,即從len 2,當前元素到目標點的距離為n,初始為n 1,因為倒數第二個到倒數第乙個只需要一步,2 判斷a len 2 的值是否大於n,如果大於...