image.png

    1. class Solution {
    2. public boolean canJump(int[] nums) {
    3. int n = nums.length;
    4. int[] dp = new int[n];
    5. //状态定义:
    6. //dp[i]:下标为i的位置是否能到达
    7. //因为初始就位于下标为0的位置,所以这个格子是一定可以到达
    8. dp[0] = 1;
    9. //状态转移
    10. //从位置i向前遍历,如果前面的点(下标为k)可以到达,即dp[k]为1,
    11. //又k+nums[k] >=i,即从k可以跳到i,则dp[i]为1
    12. for(int i = 1; i < n; i++){
    13. for(int k = 0; k < i; k++){
    14. if(dp[k] == 1){
    15. if(k + nums[k] >= i){
    16. dp[i] = 1;
    17. }
    18. }
    19. }
    20. }
    21. return dp[n - 1] == 1;
    22. }
    23. }