1. 程式人生 > >45. 跳躍遊戲II(Jump Game II)

45. 跳躍遊戲II(Jump Game II)

題目描述

給定一個非負整數陣列,你最初位於陣列的第一個位置。
陣列中的每個元素代表你在該位置可以跳躍的最大長度。
你的目標是使用最少的跳躍次數到達陣列的最後一個位置。
示例:
輸入: [2,3,1,1,4]
輸出: 2
解釋: 跳到最後一個位置的最小跳躍數是 2。
從下標為 0 跳到下標為 1 的位置,跳 1 步,然後跳 3 步到達陣列的最後一個位置。
說明:
假設你總是可以到達陣列的最後一個位置。

思路

遞迴+貪婪演算法
我們遍歷當前跳躍能到的所有位置,然後根據該位置上的跳力來預測下一步能跳到的最遠距離,貪出一個最遠的範圍,一旦當這個範圍到達末尾時,當前所用的步數一定是最小步數。

程式碼

class Solution {
    public int jump(int[] nums) {
        int res = jumpToEnd(nums, 0, 0);
        return res;
    }
    
    public static int jumpToEnd(int[] nums, int ind, int steps){
        if(ind>=nums.length-1){
            return steps;
        }
        if(ind+nums[ind]>=nums.length-1){
            return steps+1;
        }
        int val = nums[ind];
        
        int ind2 = 1;
        for(int i=2;i<=val;i++){
            if(ind+i>=nums.length){
                break;
            }
            if(i+nums[ind+i]>ind2+nums[ind+ind2]){
                ind2 = i;
            }
        }
        int tmp = jumpToEnd(nums, ind+ind2, steps+1);
        return tmp;
    }
}

更多LeetCode題解在 https://github.com/FuGaZn/LeetCode
歡迎過來給個Star~
您的肯定是我更新的動力。