class Solution(object):
def canJump(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
j=len(nums)
if j<=1:
return True
far=0
for i in range(j-1):
far=max(far,i+nums[i])
if far<=i:
return False
return True
思路就是我们把每个位置上能够到达的最远位置列出取出最远的一个,但是又要及时排查出来卡在0点的那个列表。这种思路可以简化代码:
class Solution(object):
def canJump(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
k=0
for i in range(len(nums)):
if i>k:
return False
k=max(k, i+nums[i])
return True
今天又看到了一种倒序判断的思路:
bool canJump(int* nums, int numsSize){
if(numsSize<=1){
return true;
}
int dstIdx=numsSize-1;
int idx=numsSize-2;
while(idx>=0){
if(nums[idx]>=(dstIdx-idx)){
dstIdx=idx;
}
idx--;
}
return dstIdx==0;
}
这个思路就是倒序来看每点能否被前面的点跳跃到,能则找到能够跳跃到此点的那个位置继续判断。