美文网首页
55. 跳跃游戏---自顶向下的dp

55. 跳跃游戏---自顶向下的dp

作者: bangbang2 | 来源:发表于2020-08-08 07:36 被阅读0次
image.png

1:要理解回溯问题,直接画出二叉树,然后通过不断的剪枝来实现
dp数组的1代表该点肯定能到达最后节点,0代表还不确定是不是能到达最后节点,-1代表肯定无法到达,在代码中,如果看到1就返回true,代表肯定能到达
2:如果是0,那就需要遍历从该点的下一个节点到其最大跳动长度之间,递归调用dp(i),看这些点有没有是返回true的,如果返回true,那
dp[position]=1;
return true;
否则就会
dp[position]=-1;
return false;


image.png
class Solution {
    
    public boolean canJump(int[] nums) {
    int length=nums.length;
    int [] dp=new int[length];
    dp[nums.length-1]=1; 
    //最后一个元素肯定是通的
     boolean res=dp(0,dp,length,nums);
     return res;
    }
    public boolean dp(int position,int [] dp,int length,int [] nums){
        if(dp[position]==1){//1代表肯定是能到达最后元素
            return true;
        }
        if(dp[position]==-1){
            return false;
        }
        int maxjump=Math.min(position+nums[position],length);//保证不能跳出边界
        for(int i=position+1;i<=maxjump;i++){//遍历position+1到maxjump的点,因为有很多种情况
            boolean a=dp(i,dp,length,nums);
            if(a==true){
                dp[position]=1;
                return true;
            }
        }
        dp[position]=-1;
        return false;
    }
}

相关文章

  • 55. 跳跃游戏---自顶向下的dp

    1:要理解回溯问题,直接画出二叉树,然后通过不断的剪枝来实现dp数组的1代表该点肯定能到达最后节点,0代表还不确定...

  • 递归的两种情况

    递归 和 DP 是不是都可以 自底向上 和 自顶向下 ??之前的认知是 DP是自底向上 递归是自顶向下好像这个认知...

  • 55. 跳跃游戏---自底向上的dp

    自顶向下算法是基于从左往右的推导,自底向上算法是基于从右往左的推导不用递归调用就可以实现1:第一层for循环,从倒...

  • 跳跃游戏 -dp

    给出一个非负整数数组,你最初定位在数组的第一个位置。 数组中的每个元素代表你在那个位置可以跳跃的最大长度。 判断你...

  • 55.跳跃游戏

    ···class Solution {public boolean canJump(int[] nums) {in...

  • 55.跳跃游戏

    题目给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否...

  • 55. 跳跃游戏

    leetcode

  • 55. 跳跃游戏

    给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。=判断你是否能...

  • 55.跳跃游戏

    题目描述 给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断...

  • 55. 跳跃游戏

    题目描述 给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断...

网友评论

      本文标题:55. 跳跃游戏---自顶向下的dp

      本文链接:https://www.haomeiwen.com/subject/hkmfdktx.html