解题思路:(C#)
若一个数组全为非零元素,则一定可以到达最后一个位置,因为每次跳跃的长度不超过所在元素大小,故只需要反向考虑遇到零的情况。
public class Solution
{
//创建一个用来判断一段带有零的、元素个数至少为2的数组能否越过零这个位置
public bool Zero(int n,int[] nums)
{
for(int i=n-1;i>=0;i--)
{
//考虑有两个零在数组中相邻和两个零在末尾的情况
if(nums[i]>n-i||nums[i]>=nums.Length-1-i)
{return true;}
}
return false;
}
public bool CanJump(int[] nums)
{
if(nums.Length==1)
{return true;}
if(nums[0]==0)
{return false;}
for(int i=nums.Length-1;i>0;i--)
{
//反向遍历,只需要考虑是否遇到零的情况,若非零则一定可以到达末尾位置
if(nums[i]==0)
{
if(Zero(i,nums)==false)
{return false;}
}
}
return true;
}
}