zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【距离顺序排列矩阵单元格(1030-java)】

JAVA 矩阵 距离 单元格
2023-09-27 14:29:28 时间

距离顺序排列矩阵单元格(1030-java)

给出 R 行 C 列的矩阵,其中的单元格的整数坐标为 (r, c),满足 0 <= r < R 且 0 <= c < C。

另外,我们在该矩阵中给出了一个坐标为 (r0, c0) 的单元格。

返回矩阵中的所有单元格的坐标,并按到 (r0, c0) 的距离从最小到最大的顺序排,其中,两单元格(r1, c1) 和 (r2, c2) 之间的距离是曼哈顿距离,|r1 - r2| + |c1 - c2|。(你可以按任何满足此条件的顺序返回答案。)

public class LC220_1030_allCellsDistOrder {
    //排序
    public static int[][] allCellsDistOrder(int rows, int cols, int rCenter, int cCenter) {
        Map<Integer, List<int[]>> map = new HashMap<>();
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                int dist = Math.abs(i - rCenter) + Math.abs(j - cCenter);
                List<int[]> list = map.getOrDefault(dist, new ArrayList<>());
                list.add(new int[]{i, j});
                map.put(dist, list);
            }
        }
        int k = 0;
        int[][] res = new int[rows*cols][];
        for (Integer integer : map.keySet()) {
            for (int[] ints : map.get(integer)) {
                res[k++] = ints;
            }
        }
        return res;
    }
    public static void main(String[] args) {
        int[][] ints = allCellsDistOrder(1, 2, 0, 0);
        for (int[] anInt : ints) {
            for (int i : anInt) {
                System.out.print(i + " ");
            }
            System.out.println();
        }
    }
}