题目描述:
示例 1:
输入:x = 2, y = 1
输出:1
解释:[0, 0] → [2, 1]
示例 2:
输入:x = 5, y = 5
输出:4
解释:[0, 0] → [2, 1] → [4, 2] → [3, 4] → [5, 5]
提示:
|x| + |y| <= 300
也比较简单
class Solution {
public int minKnightMoves(int x, int y) {
if(x == 0 && y == 0){
return 0;
}
boolean [][]visited = new boolean[6000][6000];
int [][]dire = {{1,-2},{1,2},{-1,2},{-1,-2},{2,1},{2,-1},{-2,1},{-2,-1}};
Queue<int[]> queue = new LinkedList<int[]>();
visited[0][0] = true;
queue.offer(new int[]{300,300});
int result = 1;
while (!queue.isEmpty()) {
int size = queue.size();
for (int i = 0; i < size; i++) {
int []tem = queue.poll();
for (int j = 0; j < dire.length; j++) {
int temx = tem[0] + dire[j][0];
int temy = tem[1] + dire[j][1];
if(temx - 300 == x && temy - 300 == y){
return result;
}
if(!visited[temx][temy]){
visited[temx][temy] = true;
queue.offer(new int[]{temx,temy});
}
}
}
result ++;
}
return result;
}
}