第九周(LeetCode)

题目给定一个整数列表,列表的每个数字表示这个位置可以往后跳的距离,判断给定列表从第一个元素是否可以跳到最后一个数字。

解决这个问题我用的方法是从后面往前遍历列表的方法。一开始的目的地位置是des = n-1,从倒数第二个(即n-2)开始,如果这个位置大于0,说明至少可以移动一个位置,可以到达des,那么只要前面部分可以到达倒数第二个位置,自然可以到达最后一个位置,之后都是类似的方法进行下去。一旦遇到0,那么说明这里不能通过,需要在0前面找到数字可以直接跨过0跳到当前des位置,然后才能更新des,更新后的des一定可以到达最后一个位置,遍历玩一遍列表后就可以判断出能不能到达最后一个位置了。代码:

class Solution:
    def canJump(self, nums):
        n = len(nums)
        des = n - 1   #目的地是倒数第一个,位置为n-1
        zero = 0
        for i in range(n-2 , -1, -1): #从倒数第二个开始判断
            if zero == 0 and nums[i] == 0:  #之前没有被0阻隔。但是遇到0了
                des = i + 1
                zero = 1
            elif zero == 1:  #被0阻拦下来
                if des-i <= nums[i]: #如果这个数字可以跨过0到达位置des
                    des = i
                    zero = 0
            else: #没有0阻拦并且遇到的不是0,des更新
                des = i
        return zero == 0 #判断到达第一个数字时中间有没有被0中断








  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值