55. 跳跃游戏

题目描述

思路
我们使用贪心的思路来解决这道题。
想要走的尽可能地远,我们就需要在走到某个可用步数比当前可用步数还要大的位置对可用步数的值进行更新。基于以上思路,我们可以令curr := nums[0],然后从i == 1开始对nums数组进行遍历。
每向后遍历一次,curr -= 1,因为要消耗一次步数才能移动到下一格。同时,如果满足curr <= nums[i],我们应该更新curr = nums[i]。因为当前可用的步数curr至少是和nums[i]相等的,如果nums[i]比curr还要大,我们显然应该使用nums[i]作为新的可用步数的值,来让我们走得更远。
最后,在每一次循环开始时,判断curr != 0,如果curr == 0,意味着一定走不到终点了,直接返回false。
基于以上思路,我们写代码来解决问题。
Golang 题解
go
func canJump(nums []int) bool {
// 每次跳跃到的位置应该是可用步数最大的位置.
curr := nums[0]
for i := 1; i < len(nums); i ++ {
if curr == 0 {
return false
}
curr -= 1
if nums[i] >= curr {
curr = nums[i]
}
}
return true
}