# 贪心算法,找到当前索引可跳的范围中,能跳步数最大的。
# 如果当前索引加自己可跳的范围大于等于了列表的长度-1,那么就step+1
# 如果当前的索引超过了列表的长度,那么就step
class Solution:
def jump(self, nums):
length = len(nums)
def solve(index = 0,step=0):
if index >=length-1:
return step
elif index+nums[index] >= length-1:
return step +1
else:
# i为索引,j为可以跳到最远的距离,i+j就是可以跳到最远的索引
temp_res = [i+j for i,j in enumerate(nums[index:index+nums[index]+1])]
return solve(index+temp_res.index(max(temp_res)),step+1)
return solve()
第二种解法
向前找最近一个能跳过来的点
class Solution:
def jump(self, nums: List[int]) -> int:
if len(nums) == nums.count(1):return len(nums)-1
def solve(nums):
if not nums:return 0
for i,j in enumerate(nums):
if i+j>=len(nums):
return solve(nums[:i])+1
return solve(nums[:-1])