leetcode(55)跳跃游戏

跳跃游戏

1、解题思路:自底向上,动态规划

class Solution {
    public boolean canJump(int[] nums) {
        int len = nums.length;
        if(len<=1){
            return true;
        }
        boolean[] temps = new boolean[len];
        return canJump2(nums,len,0,temps);
    }
    public boolean canJump2(int[] nums,int len,int start,boolean[] temps){
        if(temps[start]){
           return false; 
        }
        if(start+nums[start]>=len-1){
            return true;
        }
        for(int i=nums[start];i>0;i--){
            if(canJump2(nums,len,start+i,temps)){
                return true;
            }
        }
        temps[start]=true;
        return false;
    }
}

 2、动态规划,自顶向下

3、一种很巧的方法

解题思路:从右向左进行遍历,始终记住最左边的可以到达的点,这样子,如果最左边的点等于0,证明就可以到达了。

class Solution {
    public boolean canJump(int[] nums) {
        int len = nums.length;
        if(len<=1){
            return true;
        }
        int min = len-1;
        for(int i=len-2;i>=0;i--){
            if(nums[i]+i>=min){
                min=i;
            }
        }
        if(min==0){
            return true;
        }else{
            return false;
        } 
    }
}

猜你喜欢

转载自www.cnblogs.com/erdanyang/p/11140528.html