909. 蛇梯棋
太破防了啊啊啊啊,我的索引++,没有--,就直接超出内存限制,真没招了,找了好久错误,太粗心了啊啊啊啊啊
题目:



题解:
java
class Solution {
public int snakesAndLadders(int[][] board) {
int n = board.length;
int target = n*n;
//值映射坐标
Map<Integer, int[]> map = new HashMap<>();
int flag = 1;
int num = 1;
//我真服了,这个i没--,我还以为是变量名触发了什么呢
for(int i=n-1;i>=0;i--) {
if(flag == 1) {
for(int j=0;j<n;j++) {
map.put(num++, new int[]{i,j});
}
}
else {
for(int j=n-1;j>=0;j--) {
map.put(num++, new int[]{i,j});
}
}
flag = -flag;
}
Queue<Integer> queue = new LinkedList<>();
queue.offer(1);
//移动次数
int step=0;
boolean[] visited = new boolean[target + 1]; // 1-indexed
visited[1]=true;
while(queue.size()>0) {
int size = queue.size();
step++;
for(int i=0;i<size;i++) {
int t = queue.poll();
int[] l = map.get(t);
int x = l[0];
int y = l[1];
for(int j=t+1;j<=Math.min(target, t+6); j++) {
int fin = j;
int[] li = map.get(fin);
int r = li[0], c = li[1];
if (board[r][c] != -1) {
fin = board[r][c];
}
// 如果是终点,直接返回
if (fin == target) {
return step;
}
if(visited[fin]==false) {
// 标记并入队
visited[fin] = true;
queue.offer(fin);
}
}
}
}
return -1;
}
}