lc1030-距离顺序排列矩阵单元格

题目描述

  • 官方把题目描述得稀烂
  • 左上角为 (0, 0),n x m 的点阵(屏幕坐标系,x轴向下,y轴向右)
  • 给定其中一点 p,所有点按到 p 的曼哈顿距离排序

示例

输入:rows = 1, cols = 2, rCenter = 0, cCenter = 0
输出:[[0,0],[0,1]]
输入:rows = 2, cols = 2, rCenter = 0, cCenter = 1
输出:[[0,1],[0,0],[1,1],[1,0]]
输入:rows = 2, cols = 3, rCenter = 1, cCenter = 2
输出:[[1,2],[0,2],[1,1],[0,1],[1,0],[0,0]]

题解

  • 思路
    • 把所有点生成出来,按曼哈顿距离排序即可
    • 用小顶堆也行,但没有排序方便
func allCellsDistOrder(rows int, cols int, rCenter int, cCenter int) [][]int {
    res := make([][]int, 0, rows * cols)
    for i := 0; i < rows; i ++ {
        for j := 0; j < cols; j ++ {
            res = append(res, []int{i, j})
        }
    }
    sort.Slice(res, func(i, j int) bool {
        return myabs(res[i][0] - rCenter) + myabs(res[i][1] - cCenter) <
               myabs(res[j][0] - rCenter) + myabs(res[j][1] - cCenter)
    })
    return res
}

func myabs(x int) int {
    if (x < 0) { x = -x }
    return x
}
posted @ 2025-09-17 21:21  余越  阅读(10)  评论(0)    收藏  举报