题目:给一个数组,一个出发的位置start, 一个你想去的位置end, 然后比如a在i位置, 它只能往左蹦到i-a, 往右蹦到i + a位置两种选择, 你的值表示的是你每次必须严格跳的距离。
- arr数组下标是从0开始的,但是题目给的参数start是从1开始的,所以coding的时候要注意一下
宽度优先遍历

- 注意,越界了的要杀死, 出现重复值的要杀死

然后最终找到了的话,层数就是要跳的步数, 因为是宽度优先遍历嘛,所以总能很快找到(前提是存在)
// 宽度优先遍历public static int jump3(int N, int start, int end, int[] arr) {if (start < 1 || start > N || end < 1 || end > N) {return -1;}Queue<Integer> queue = new LinkedList<>();HashMap<Integer, Integer> levelMap = new HashMap<>();queue.add(start);levelMap.put(start, 0);while (!queue.isEmpty()) {int cur = queue.poll();int level = levelMap.get(cur);if (cur == end) {return level;} else {int left = cur - arr[cur - 1];int right = cur + arr[cur - 1];if (left > 0 && !levelMap.containsKey(left)) {queue.add(left);levelMap.put(left, level + 1);}if (right <= N && !levelMap.containsKey(right)) {queue.add(right);levelMap.put(right, level + 1);}}}return -1;}
