Q45 - Medium - 跳跃游戏 II

给定一个非负整数数组,你最初位于数组的第一个位置。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

你的目标是使用最少的跳跃次数到达数组的最后一个位置。

示例:

输入: [2,3,1,1,4]
输出: 2
解释: 跳到最后一个位置的最小跳跃数是 2。
从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。

class Solution:
    def jump(self, nums: 'List[int]') -> 'int':
        if len(nums) == 1:
            return 0
        return self.dfs(0, nums)
    
    def dfs(self, i, nums):
        if i >= len(nums) - 1:
            return 0
        idx = 0
        for j in range(1, nums[i]+1):
            if i + j == len(nums) - 1:
                return 1
            if nums[j+i] + j >= nums[idx+i] + idx:
                idx = j
        return self.dfs(idx+i, nums) + 1
class Solution:
    def jump(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """ 
        if len(nums) == 1:
            return 0
        if len(set(nums)) == 1:
            return (len(nums)-2)//nums[0]+1
        pos = [len(nums)-1]
        temp = len(nums)-1
        count = 0
        while 0 not in pos:
            count += 1
            for j in range(temp):
                if nums[j] + j >= temp:
                    temp = j
                    pos.append(j)
                    break
        return count
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 今天继续写一道动态规划题目 给定一个非负整数数组,假定你的初始位置为数组第一个下标。 数组中的每个元素代表你在那个...
    小熊_宝宝阅读 774评论 0 0
  • 链接:https://leetcode-cn.com/problems/jump-game-ii/descript...
    aniegai阅读 2,096评论 0 2
  • 题目给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 你的目...
    HITZGD阅读 306评论 0 0
  • LeetCode 55. Jump Game一个数组存储了非负整型数据,数组中的第i个元素nums[i],代表了可...
    徐凯_xp阅读 400评论 0 0