本题通常解法是广度优先遍历,算法的复杂度是O(n2)
动态规划巧妙解决方法:
猜测状态f[n-1].....因为会有很多种情况可以一步跳到n-1,f[i]表示到达第i个位置所需要的最少步数
f[n-1]=min(f[n-k],f[n-3],f[n-2])+1
对于f[n-k]<=f[n-k-1]<=f[n-3]<=f[n-2] 因此当我们要求某一个f[i]的时候,我们需要找到最早能够经过一步到达i点的j点。
f[i]=f[j]+1
对于j点的选择,应该是贪心算法---使得j离得i最远
``` import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 最少需要跳跃几次能跳到末尾
     * @param n int整型 数组A的长度
     * @param A int整型一维数组 数组A
     * @return int整型
     */
    public int Jump (int n, int[] A) {
        // write code here
        int []f=new int[n];
        for(int i=1,j=0;i<n;i++){
            while(j+A[j]<i)j++;
            f[i]=f[j]+1;
        }return f[n-1];
    }
}
```