题目:
我的解法:
思路:计算出每个单元格与给定坐标的距离d,将单元格[i,j]的坐标加入距离d形成三元组[i,j,d],保存到一个数组中。对这个数组中的单元格,重写sort函数,使其根据d进行排序。最终再取排序后的数组中每个单元格的坐标,保存到最终的结果数组中。
class Solution {
public int[][] allCellsDistOrder(int R, int C, int r0, int c0) {
// 创建三元组数组,保存每个单元格的距离d
int[][] triple_tuple = new int[R*C][];
int index = 0;
for(int i=0; i<R; i++){
for(int j=0; j<C; j++){
int d1 = i>r0 ? i-r0:r0-i;
int d2 = j>c0 ? j-c0:c0-j;
int d = d1 + d2;
int[] block = new int[]{
i,j,d};
triple_tuple[index] = block;
index++;
}
}
// 根据d对三元组数组进行排序
Arrays.sort(triple_tuple, new Comparator<int[]>() {
public int compare(int[] block1, int[] block2) {
return block1[2] - block2[2];
}
});
// 最后从排序后的三元组数组中取出每个单元格坐标
int len = triple_tuple.length;
int[][] result = new int[len][];