leet55. 跳躍遊戲
阿新 • • 發佈:2018-11-10
題目:
給定一個非負整數陣列,您最初位於陣列的第一個索引處。
陣列中的每個元素表示您在該位置的最大跳躍長度。
確定是否能夠到達最後一個索引。
示例:
A = [2,3,1,1,4]
,返回 true
。
A = [3,2,1,0,4]
,返回 false
。
分析:
- 該問題是動態規劃問題;
- 如果除尾部元素外的所有元素均為非零元素,則一定可以到達最後一個索引
- 當除尾部元素外,其餘元素存在0元素,則要跳過該0元素,在0之前需要有一個元素,足夠使得從大元素位置可以跳過該0元素位置
- 為實現以上目的,建立一個棧,用於儲存0元素及其出現後的元素,當入棧元素值大於棧長度減1時,表明由該位置可以跳過棧底的0元素,則將棧清空
- 逆向遍歷列表後,判斷如果為空棧則可以到達最後一個索引
程式碼:
class Solution(object): def canJump(self, nums): """ :type nums: List[int] :rtype: bool """ stack = [] zeroStack = [] for i,x in enumerate(nums[::-1]): # print stack if not x: if i > 0: stack.append(x) zeroStack.append(x) else: if stack: stack.append(x) if stack[-1] > len(stack) - 1: stack = [] if stack: return False return True
思考: