55. Jump Game (DP)
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 }