55. 跳躍遊戲
給你一個非負整數陣列 nums ,你最初位於陣列的 第一個下標 。陣列中的每個元素代表你在該位置可以跳躍的最大長度。
判斷你是否能夠到達最後一個下標,如果可以,返回 true ;否則,返回 false 。
示例 1:
輸入:nums = [2,3,1,1,4]
輸出:true
解釋:可以先跳 1 步,從下標 0 到達下標 1, 然後再從下標 1 跳 3 步到達最後一個下標。
示例 2:
輸入:nums = [3,2,1,0,4]
輸出:false
解釋:無論怎樣,總會到達下標為 3 的位置。但該下標的最大跳躍長度是 0 , 所以永遠不可能到達最後一個下標。
題解
package canjump
func canJump(nums []int) bool {
n := len(nums)
end := n - 1 // 需要到達的最遠位置
result := false // 當前位置是否能到達
// 從後往前遍歷
for i := n - 1; i >= 0; i-- {
if i+nums[i] >= end { // 索引加跳數大於等於需要到達的最遠位置
result = true // 當前位置可以到達
end = i // 修改最遠位置位當前位置
} else {
result = false // 不能到達
}
}
// 返回結果
return result
}