用 Python 编写程序检查我们能否通过单词列表拼出目标

pythonserver side programmingprogramming更新于 2026/1/9 0:12:17

假设我们有一个名为 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 插入其中

  • while size of tovisit < 0,执行

    • i:= tovisit 中的最后一个元素并将其从 tovisit 中删除

    • 如果 i 与 n-1 相同,则

    • 返回 True

  • 如果 accessed[i] 不等于 1,则

    • visited[i]:= 1

    • up:= i + nums[i]

    • down:= i - nums[i]

    • 如果 up < n,则

    • 在 tovisit 末尾向上插入

    • 如果 down >= 0,则

    • 在 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

相关文章


有用资源