第九周(LeetCode)
阿新 • • 發佈:2018-12-06
題目給定一個整數列表,列表的每個數字表示這個位置可以往後跳的距離,判斷給定列表從第一個元素是否可以跳到最後一個數字。
解決這個問題我用的方法是從後面往前遍歷列表的方法。一開始的目的地位置是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中斷