第九周(LeetCode)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LRH2018/article/details/80219128

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

解决这个问题我用的方法是从后面往前遍历列表的方法。一开始的目的地位置是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中断








猜你喜欢

转载自blog.csdn.net/LRH2018/article/details/80219128