image.png

    主要练dp的定义

    1. class Solution {
    2. public int jump(int[] nums) {
    3. int n = nums.length;
    4. int[] dp = new int[n];
    5. //状态定义
    6. //dp[i]:到达位置i的最少跳跃次数
    7. //初始化,初始化为无穷大
    8. Arrays.fill(dp, Integer.MAX_VALUE);
    9. //最开始就位于下标0,所以次数为0
    10. dp[0] = 0;
    11. //状态转移
    12. //从i向前搜索,如果遇到位置k,且满足 k + nums[k] >=i,
    13. //尝试更新dp[i],即dp[i] = min(dp[i], dp[k]+1)
    14. for(int i = 1; i < n; i++){
    15. for(int k = 0; k < i; k++){
    16. if(k + nums[k] >= i){
    17. dp[i] = Math.min(dp[i], dp[k] + 1);
    18. }
    19. }
    20. }
    21. return dp[n - 1];
    22. }
    23. }