1 //Old
2 class Solution {
3 public boolean canJump(int[] nums) {
4 int n = nums.length;
5 if(n == 0) return false;
6 if(n == 1) return true;
7 if(nums[0] == 0) return false;
8 boolean[] res = new boolean[n];
9 res[0] = true;
10 for(int i = 0; i < n; i++) {
11 if(res[i] == true) {
12 for(int j = 1; j <= nums[i] && j + i < n ; j++) {
13 if(res[i + j] == false) {
14 res[i + j] = true;
15 }
16
17 }
18 }
19
20 }
21 return res[n - 1];
22 }
23 }
24
25 //New
26 //从后往前 看看最多能不能到0
27 class Solution {
28 public boolean canJump(int[] nums) {
29 int n = nums.length;
30 if(n == 1) return true;
31 int last = n - 1;
32 for(int i = last - 1; i >= 0; i--) {
33 if(nums[i] >= last - i) {
34 last = i;
35 }
36 }
37 return last == 0;
38 }
39 }