用Jump gameII的方法当然能解,不过有更简单的想法:
什么时候走投无路呢?0,不然至少可以向下走一步。
所以只要找所有为0的点。记录上一个A[i]=0的i为prev0.
记录当先能达到的最远点为max。每次找到一个新的A[i]=0,
遍历从prev0到i的所有结点,看能不能跨过i,不能就返回true。
注意如果i=n-1,不管A[n-1]是不是0,都成功了。
public class Solution {
public boolean canJump(int[] A) {
int i,j;
int prev0=-1;
int n=A.length;
int max=0;
for(i=0;i<n;i++)
{
if(A[i]==0)
{
if(i==n-1)
return true;
for(j=prev0+1;j<i;j++)
{
if(j+A[j]>max)
max=j+A[j];
}
//System.out.println(j);
if(max<=i)
return false;
prev0=i;
}
}
return true;
}
}
本文介绍了一种判断能否跨越障碍的算法实现。该算法通过记录可达最远位置和最近障碍位置来判断是否能够到达终点。文章提供了一个具体的Java实现案例。
646

被折叠的 条评论
为什么被折叠?



