We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
这里有一个非负整数数组 arr,你最开始位于该数组的起始下标 start 处。当你位于下标 i 处时,你可以跳到 i + arr[i] 或者 i - arr[i]。
请你判断自己是否能够跳到对应元素值为 0 的 任一 下标处。
注意,不管是什么情况下,你都无法跳到数组之外。
示例 1: 输入:arr = [4,2,3,0,3,1,2], start = 5 输出:true 解释: 到达值为 0 的下标 3 有以下可能方案: 下标 5 -> 下标 4 -> 下标 1 -> 下标 3 下标 5 -> 下标 6 -> 下标 4 -> 下标 1 -> 下标 3 示例 2: 输入:arr = [4,2,3,0,3,1,2], start = 0 输出:true 解释: 到达值为 0 的下标 3 有以下可能方案: 下标 0 -> 下标 4 -> 下标 1 -> 下标 3 示例 3: 输入:arr = [3,0,2,1,2], start = 2 输出:false 解释:无法到达值为 0 的下标 1 处。
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/jump-game-iii 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
利用 BFS 的思路,维护一个队列 queue 表示待处理的下标,先把 start 起点放入队列中,然后从起点开始根据起点对应的值分别把左右两边对应的下标放入队列中,不断循环。形象点来说就是每次跳完一格,都把这格对应的左右两边可跳的下标放入队列里,下次继续跳。
queue
start
visited
如果这个过程中发现了某一格是 0,那么就成功,如果整个循环结束了都没发现,那么就失败。
/** * @param {number[]} arr * @param {number} start * @return {boolean} */ let canReach = function (arr, start) { let n = arr.length; let visited = []; let queue = [start]; while (queue.length) { let index = queue.pop(); let val = arr[index]; if (val === 0) { return true; } let left = index - val; let right = index + val; if (left >= 0 && !visited[left]) { queue.push(left); } if (right < n && !visited[right]) { queue.push(right); } visited[index] = true; } return false; };
The text was updated successfully, but these errors were encountered:
No branches or pull requests
这里有一个非负整数数组 arr,你最开始位于该数组的起始下标 start 处。当你位于下标 i 处时,你可以跳到 i + arr[i] 或者 i - arr[i]。
请你判断自己是否能够跳到对应元素值为 0 的 任一 下标处。
注意,不管是什么情况下,你都无法跳到数组之外。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/jump-game-iii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
利用 BFS 的思路,维护一个队列
queue
表示待处理的下标,先把start
起点放入队列中,然后从起点开始根据起点对应的值分别把左右两边对应的下标放入队列中,不断循环。形象点来说就是每次跳完一格,都把这格对应的左右两边可跳的下标放入队列里,下次继续跳。visited
数组记录下来,下次对于这个处理过的下标就不再放入队列中。如果这个过程中发现了某一格是 0,那么就成功,如果整个循环结束了都没发现,那么就失败。
The text was updated successfully, but these errors were encountered: