55.Jump Game
===
###### tags: `Medium`,`Array`,`DP`,`Greedy`
[55. Jump Game](https://leetcode.com/problems/jump-game/)
### 題目描述
You are given an integer array `nums`. You are initially positioned at the array's **first index**, and each element in the array represents your maximum jump length at that position.
Return `true` *if you can reach the last index, or* `false` *otherwise*.
### 範例
**Example 1:**
```
Input: nums = [2,3,1,1,4]
Output: true
Explanation: Jump 1 step from index 0 to 1, then 3 steps to the last index.
```
**Example 2:**
```
Input: nums = [3,2,1,0,4]
Output: false
Explanation: You will always arrive at index 3 no matter what. Its maximum jump length is 0, which makes it impossible to reach the last index.
```
**Constraints**:
* 1 <= `nums.length` <= 10^4^
* 0 <= `nums[i]` <= 10^5^
### 解答
#### Javascript
```javascript=
function canJump(nums) {
let max = nums[0];
for (let i = 1; i < nums.length; i++) {
if (i > max) return false;
max = Math.max(max, i + nums[i]);
}
return true;
}
```
>[name=Marsgoat][time= Dec 26, 2022]
#### Python
```python=
class Solution:
def canJump(self, nums: List[int]) -> bool:
last = len(nums) - 1
for i, num in reversed(list(enumerate(nums))):
if i + num >= last:
last = i
return last == 0
```
> 來點反向思維
> [name=Yen-Chi Chen][time=Mon, Dec 26, 2022]
```python=
class Solution:
def canJump(self, nums: List[int]) -> bool:
n = len(nums)
#can_reach_end = [0]*len(nums)
#can_reach_end[-1] = 1
last_can_reach = n-1
for idx in range(n-2, -1, -1):
if idx+nums[idx] >= last_can_reach:
#can_reach_end = 1
last_can_reach = idx
if last_can_reach != 0:
return False
else:
return True
```
> 一開始寫DFS 笑死 越想越不對勁
> [name=玉山][time=Mon, Dec 26, 2022]
### Reference
[回到題目列表](https://hackmd.io/@Marsgoat/leetcode_every_day)