給定一個非負整數數組,你最初位於數組的第一個位置。
數組中的每個元素代表你在該位置可以跳躍的最大長度。
判斷你是否能夠到達最後一個位置。
示例 1:
輸入: [2,3,1,1,4] 輸出: true 解釋: 我們可以先跳 1 步,從位置 0 到達 位置 1, 然後再從位置 1 跳 3
步到達最後一個位置。 示例 2:輸入: [3,2,1,0,4] 輸出: false 解釋: 無論怎樣,你總會到達索引爲 3 的位置。但該位置的最大跳躍長度是 0 ,
所以你永遠不可能到達最後一個位置。
public boolean canJump(int[] nums) {
if (nums.length < 2) {
return true;
}
boolean[] dp = new boolean[nums.length];
//targetPos表示當前位置元素要最終跳到終點,下一步至少需要能跳到的位置
int targetPos = nums.length - 1;
for (int i = nums.length - 2; i >= 0; i--) {
//能夠跳到目標位置,則當前位置是可達位置
if (nums[i] + i >= targetPos) {
dp[i] = true;
//將至少能跳到的位置更新
targetPos = i;
}
}
return dp[0];
}