1. 程式人生 > 其它 >leetcode-55. 跳躍遊戲

leetcode-55. 跳躍遊戲

第一種方式超時

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; } };