45. 跳躍遊戲II(Jump Game II)
阿新 • • 發佈:2018-11-13
題目描述
給定一個非負整數陣列,你最初位於陣列的第一個位置。
陣列中的每個元素代表你在該位置可以跳躍的最大長度。
你的目標是使用最少的跳躍次數到達陣列的最後一個位置。
示例:
輸入: [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~
您的肯定是我更新的動力。