1. 程式人生 > >leet55. 跳躍遊戲

leet55. 跳躍遊戲

題目:

給定一個非負整數陣列,您最初位於陣列的第一個索引處。

陣列中的每個元素表示您在該位置的最大跳躍長度。

確定是否能夠到達最後一個索引。

示例:
A = [2,3,1,1,4],返回 true

A = [3,2,1,0,4],返回 false

分析:

  1. 該問題是動態規劃問題;
  2. 如果除尾部元素外的所有元素均為非零元素,則一定可以到達最後一個索引
  3. 當除尾部元素外,其餘元素存在0元素,則要跳過該0元素,在0之前需要有一個元素,足夠使得從大元素位置可以跳過該0元素位置
  4. 為實現以上目的,建立一個棧,用於儲存0元素及其出現後的元素,當入棧元素值大於棧長度減1時,表明由該位置可以跳過棧底的0元素,則將棧清空
  5. 逆向遍歷列表後,判斷如果為空棧則可以到達最後一個索引

程式碼:

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

思考: