程序来检查我们是否可以通过单词列表拼出目标

假设我们有一个称为nums和另一个数字k的数字列表。如果我们从索引k和任何索引i开始,则可以向左或向右移动nums [i]个步骤。我们必须检查是否可以到达列表的末尾。

因此,如果输入类似于nums = [0,0,2,1,1,3,3,1,1] k = 2,则输出将为True,就像我们从索引2开始一样,然后跳至索引4然后跳到最后一个索引7。

为了解决这个问题,我们将按照以下步骤操作:

  • n:=数字大小

  • Visited:=大小为n的列表,并填充0

  • 访问:=大小为1的列表,然后将k插入其中

  • 当访问量小于0时,执行

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

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

    • 返回True

  • 如果visit [i]与1不同,则

    • 访问过[i]:= 1

    • 上:= i +数字[i]

    • down:= i-nums [i]

    • 如果up <n,则

    • 在访问结束时插入

    • 如果向下> = 0,则

    • 在访问结束时插入

  • 返回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
猜你喜欢