Leetcode55.跳跃游戏
Leetcode55.跳跃游戏
赵海波给你一个非负整数数组
nums
,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回
true
;否则,返回false
。示例 1:
1
2
3 >输入:nums = [2,3,1,1,4]
>输出:true
>解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。示例 2:
1
2
3 >输入:nums = [3,2,1,0,4]
>输出:false
>解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。
要成功跳跃,即每一步要落点在不等于0且下一次条约距离足够远的点,正向去做非常复杂,因此,正难则反…反过来思考。从最后一个节点开始,从后往前寻找能到达它的结点,重复此步骤,更新跳跃者的位置,如果在此位置前无法找到一个节点能到达此位置,说明跳跃会失败返回False…如果跳跃者位置更新到了下标为0的节点,说明跳跃成功,返回True 这里从后往前找到第一个能到达此位置的点的原因是:第一个点找到,如果存在能成功的方案,找第一个点只是增加了跳跃的次数,而不会改变能不能跳跃成功.
1 | class Solution(object): |
评论
匿名评论隐私政策