给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。
输入: [2,3,1,1,4]
输出: true
解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。
//感想:一开始感觉没什么思路感觉像是那种搜索树的结构,想去看下答案,我点开题解的一刹那,我看见了四个字动态规划,我果断地回到了题目描述的界面,算是没看答案吧。。。
//思路:从底向上动态规划,我们声明一个dp数组,初始值最后一个元素设置为true,那肯定可以啊,然后往前走,如果遍历到的元素它的值为step,我们就可以从这个位置到加上step的位置所有的元素都可以抵达,也就说这中间只要有一个为true,那么这个位置就为true,如果走到step还是为false,说明这个位置走不到末尾,设为false,就这样走到头,得到第一个元素可以到达末尾不。
下面是代码:
1 class Solution { 2 public boolean canJump(int[] nums) { 3 if(nums==null||nums.length==0) 4 return false; 5 int n=nums.length; 6 boolean[] dp=new boolean[n]; 7 dp[n-1]=true; 8 for(int i=n-2;i>=0;i--) 9 { 10 int step=nums[i]; 11 for(int j=1;j<=step;j++) 12 { 13 if(dp[i+j]==true) 14 { 15 dp[i]=true; 16 break; 17 } 18 } 19 } 20 return dp[0]; 21 } 22 }
原文地址:https://www.cnblogs.com/cold-windy/p/11751279.html
时间: 2024-10-04 18:14:04