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