1. 程式人生 > >第九周(LeetCode)

第九周(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中斷