Q45 - Medium - 跳跃游戏 II

2019-02-22  本文已影响0人  1f872d1e3817

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

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

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

示例:

输入: [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
上一篇 下一篇

猜你喜欢

热点阅读