1306. 跳跃游戏 III
最后更新于
最后更新于
输入:arr = [4,2,3,0,3,1,2], start = 5
输出:true
解释:
到达值为 0 的下标 3 有以下可能方案:
下标 5 -> 下标 4 -> 下标 1 -> 下标 3
下标 5 -> 下标 6 -> 下标 4 -> 下标 1 -> 下标 3 输入:arr = [4,2,3,0,3,1,2], start = 0
输出:true
解释:
到达值为 0 的下标 3 有以下可能方案:
下标 0 -> 下标 4 -> 下标 1 -> 下标 3输入:arr = [3,0,2,1,2], start = 2
输出:false
解释:无法到达值为 0 的下标 1 处。 func canReach(arr []int, start int) bool {
n := len(arr)
q := []int{start}
visited := make([]bool, n)
visited[start] = true
for len(q) > 0 {
node := q[0]
q = q[1:]
if arr[node] == 0 {
return true
}
l, r := node-arr[node], node+arr[node]
if 0 <= l && l < n && !visited[l]{
q = append(q, l)
visited[l] = true
}
if 0 <= r && r < n && !visited[r]{
q = append(q, r)
visited[r] = true
}
}
return false
}