Leetcode055 jump-game

跳跃游戏

题目描述:

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

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

判断你是否能够到达最后一个位置。

示例1

输入: [2,3,1,1,4]
输出: true
解释: 从位置 0 到 1 跳 1 步, 然后跳 3 步到达最后一个位置。

示例2

输入: [3,2,1,0,4]
输出: false
解释: 无论怎样,你总会到达索引为 3 的位置。
但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。

解题思路:

  • 本题的关键点就是是否有0点位置出现,如果没有,那么一定可以到达终点,如果有,就需要进行下一步判断

  • 如果有零点的出现,那么就需要判断是否存在在零点之前的某一点,其最大值可以移动到零点之后

  • 于是我们就将零点以及其之前的点进行倒序排序,然后遍历每一个点,将该点的值和其到零点的距离相比较,如果出现更大的值,那么就认为可以跨过这个零点


Python源码:

from typing import List

class Solution:
    def canJump(self, nums: List[int]) -> bool:
        for i in range(len(nums) - 1):  # 遍历数组
            if nums[i] != 0:
                continue  # 如果不为0,就进行下一次循环
            else:  # 找到了第i个数是0
                temp = nums[0:i + 1][::-1]
                count = 0
                flag = False
                for item in temp:
                    if item > count:
                        flag = True  # 可以跳到该位置
                        break
                    count += 1
                if not flag: return False
        return True

欢迎关注我的github:https://github.com/UESTCYangHR

你可能感兴趣的:(Leetcode055 jump-game)