leetcode-55. 跳跃游戏_i++

第一种方式超时

class Solution {
public:
    bool canJump(vector<int>& nums) {
        if(jump(nums,0))
            return true;
        return false;

    }
    bool jump(vector<int> nums,int index){
        if(index > nums.size()-1)
            return false;
        else if(index == nums.size()-1)
            return true;
        else {
            cout<<"index: "<<index<<endl;
            bool res =false;
            for(int i = 1; i<=nums[index];i++){
                 if(jump(nums,index+i))
                    res = true;
            }
            return res;
        } 
    }
};

如果某一个作为 起跳点 的格子可以跳跃的距离是 3,那么表示后面 3 个格子都可以作为 起跳点。
可以对每一个能作为 起跳点 的格子都尝试跳一次,把 能跳到最远的距离 不断更新。
如果可以一直跳到最后,就成功了。

 

class Solution {
public:
    bool canJump(vector<int>& nums) {
        int len = nums.size();
        int maxreach = 0;
        for(int i = 0; i < len; i++){
            if(i<=maxreach){
                maxreach = max(maxreach, i + nums[i]);
                if(maxreach>=len-1)
                    return true;
            }
        }
        return false;
    }
};