lintcode-跳跃游戏II-117

给出一个非负整数数组,你最初定位在数组的第一个位置。

数组中的每个元素代表你在那个位置可以跳跃的最大长度。   

你的目标是使用最少的跳跃次数到达数组的最后一个位置。


样例

给出数组A = [2,3,1,1,4],最少到达数组最后一个位置的跳跃次数是2(从数组下标0跳一步到数组下标1,然后跳3步到数组的最后一个位置,一共跳跃2次)

class Solution {
public:
   
    int jump(vector<int> A) {
        int n;
        if(0==(n=A.size()))
            return 0;
        int steps[n];    //记录到达该点时所需要的最小步数 [0...i...n]
        steps[0]=0;                   
       
        for (int i = 1; i<n; i++) {      //当到达下标为i的点时
            for (int j = 0; j<i; j++) { 
                if (j+A[j] >= i) {      //走到下标为j的点时若能跳跃到下标为i点
                    steps[i] = steps[j] + 1; //更新步数
                    break;                   //不必往后继续循环的原因是越靠近起点的点(j越接近0)
                }                            //必然步数越少,因为往后的步数更新都是基于前面的点
            }                                //这么想:不论怎样走,走到第5格需要的步数肯定少于走到第10格
        }
        
        return steps[n-1];
    }
};


你可能感兴趣的:(lintcode-跳跃游戏II-117)