Jump to End
列表跳跃
问题描述
给定一个整数列表,列表中每一个值表示从该位置最多可以往后跳的步数。算法返回从第一个位置调到最后一个位置所需要的最小步数。
测试样例
# Input:
nums = [3, 2, 5, 1, 1, 9, 3, 4]
# Output:
2
# 按照 3 -> 5 ->4 的方式,最少只需要跳两步。
内容首发于微信公众号IT信息教室,如果您想学习更多AI相关的技能,欢迎搜索关注或微信扫描下方二维码关注~~
参考代码
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# ---------------------
# O(n2) time, O(n) space.
# ---------------------
class Solution:
# 动态规划问题,首先需要找到动态规划的表达式。
def jumpToEnd(self, nums):
jumps = [float('inf') for _ in nums]
jumps[0] = 0
for i, num in enumerate(nums):
for j in range(1, num+1):
if i + j < len(nums):
jumps[i+j] = min(jumps[i+j], jumps[i] + 1)
else:
break
return jumps[-1]
# Test Program
nums = [3, 2, 5, 1, 1, 9, 3, 4]
print(Solution().jumpToEnd(nums))
# 2
# 3 -> 5 -> 4