Python程式檢查是否可以透過單詞列表拼寫出目標
假設我們有一個名為 nums 的數字列表和另一個數字 k。如果我們從索引 k 開始,並且在任何索引 i 處,我們都可以向左或向右移動正好 nums[i] 步。我們必須檢查我們是否可以到達列表的末尾。
因此,如果輸入類似於 nums = [0, 0, 2, 1, 3, 3, 1, 1] k = 2,則輸出將為 True,因為如果我們從索引 2 開始,然後跳到索引 4,然後跳到最後一個索引 7。
為了解決這個問題,我們將遵循以下步驟:
n := nums 的大小
visited := 一個大小為 n 的列表,並填充 0
tovisit := 一個大小為 1 的列表,並將 k 插入其中
當 tovisit 的大小 < 0 時,執行以下操作
i := tovisit 中的最後一個元素,並將其從 tovisit 中刪除
如果 i 與 n-1 相同,則
返回 True
如果 visited[i] 與 1 不相同,則
visited[i] := 1
up := i + nums[i]
down := i - nums[i]
如果 up < n,則
將 up 插入 tovisit 的末尾
如果 down >= 0,則
將 down 插入 tovisit 的末尾
返回 False
讓我們看看以下實現以獲得更好的理解:
示例
class Solution: def solve(self, nums, k): n=len(nums) visited = [0]*n tovisit = [k] while len(tovisit)>0: i=tovisit.pop() if i==n-1: return True if visited[i]!=1: visited[i]=1 up=i+nums[i] dn=i-nums[i] if up=0: tovisit.append(dn) return False ob = Solution() nums = [0, 0, 2, 1, 3, 3, 1, 1] k = 2 print(ob.solve(nums, k))
輸入
[0, 0, 2, 1, 3, 3, 1, 1], 2
輸出
True
廣告