[leetcode 10-05] 二、跳跃游戏 --(动态规划,贪心算法)

在这里插入图片描述

		max_i = 0       #初始化当前能到达最远的位置
        for i, jump in enumerate(nums):   #i为当前位置,jump是当前位置的跳数
            if max_i>=i and i+jump>max_i:  #如果当前位置能到达,并且当前位置+跳数>最远位置  
                max_i = i+jump  #更新最远能到达位置
        return max_i>=i

不断获取最大位置
max_i > i 表示经过最初的更新,可以达到的位置能够超过这个i
可以调的最大位置
参考链接

动态规划解法

		dp = [False]*len(nums)
        dp[0] = True
        for i in range(1,len(nums)):
            if dp[i-1] == False:  # 左侧不可达,则直接False
                dp[i] = False
            elif nums[i-1] == 0:  # i-j == 0表示不能到下一步 
                for j in range(i-1,-1,-1):  # 此时要往前推
                    if nums[j] >= i - j:
                        dp[i] = True
                        print(j,i)
                        break
            else:
                dp[i] = True  # 如果 i-1 不止一步的话,直接下一步
        return dp[-1]

猜你喜欢

转载自blog.csdn.net/weixin_45492560/article/details/120617520