通过从Python中的k开始检查我们是否可以到达列表末尾的程序

假设我们有一个称为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
猜你喜欢