Titulo
https://leetcode-cn.com/problems/jump-game-iii/
Hay una matriz de enteros no negativos, arr, y usted está al comienzo de la matriz. Cuando esté en el subíndice i, puede saltar a i + arr [i] o i-arr [i].
Por favor, juzgue si puede saltar a cualquier subíndice donde el valor del elemento correspondiente sea 0.
Tenga en cuenta que no importa cuál sea la situación, no puede saltar fuera de la matriz.
Ejemplo 1:
Entrada: arr = [4,2,3,0,3,1,2], inicio = 5
Salida: verdadero
Explicación: El subíndice
3 con un valor de 0 tiene las siguientes soluciones posibles:
subíndice 5-> subíndice 4-> subíndice 1-> subíndice 3
subíndice 5-> subíndice 6-> subíndice 4-> subíndice 1-> subíndice 3
Ejemplo 2
Entrada: arr = [4,2,3,0,3,1,2], inicio = 0
Salida: verdadero
Explicación: El subíndice
3 con un valor de 0 tiene las siguientes soluciones posibles:
subíndice 0-> subíndice 4-> subíndice 1-> subíndice 3
Ejemplo 3
Entrada: arr = [3,0,2,1,2], inicio = 2
Salida: falso
Explicación: No se puede alcanzar el subíndice 1 con un valor de 0.
Consejos:
1 <= longitud de llegada <= 5 * 10 ^ 4
0 <= arr [i] <longitud de llegada
0 <= inicio <longitud de llegada
Ideas para resolver problemas
- Proceso BFS estándar
- Utilice el
seen_set
almacenamiento establecido para acceder a los subíndices - Al atravesar la amplitud, además de juzgar si ha sido visitado, también es necesario verificar si ha cruzado los bordes izquierdo y derecho
Código
class Solution:
def canReach(self, arr: List[int], start: int) -> bool:
seen_set = set([start])
q = [start]
while q:
p = q.pop(0)
if arr[p] == 0:
return True
for k in [p-arr[p], p+arr[p]]:
if k in seen_set: continue
if 0 <= k <= len(arr)-1:
q.append(k)
seen_set.add(k)
return False