python-leetcode-1030. 距离顺序排列矩阵单元格

1030. 距离顺序排列矩阵单元格 - 力扣(LeetCode)

可以使用 BFS(广度优先搜索)或排序的方法来解决这个问题。以下是使用排序的方法:

解题思路:

  1. 生成矩阵中所有单元格的坐标。

  2. 计算每个单元格到 (rCenter, cCenter) 的曼哈顿距离。

  3. 按照曼哈顿距离排序,最后返回排序后的结果。

代码实现:

def allCellsDistOrder(rows, cols, rCenter, cCenter):
    # 生成所有坐标
    cells = [(r, c) for r in range(rows) for c in range(cols)]
    # 按曼哈顿距离排序
    cells.sort(key=lambda cell: abs(cell[0] - rCenter) + abs(cell[1] - cCenter))
    return cells

# 测试
rows, cols, rCenter, cCenter = 3, 3, 0, 0
print(allCellsDistOrder(rows, cols, rCenter, cCenter))

复杂度分析:

  • 生成所有单元格的坐标:O(rows * cols)

  • 计算曼哈顿距离并排序:O(rows * cols log(rows * cols))

  • 总体复杂度为 O(rows * cols log(rows * cols)),适用于较小矩阵。

如果 rowscols 很大,可以使用 BFS 来避免排序,提高效率至 O(rows * cols)。你需要一个队列和 visited 集合来逐层扩展单元格。要实现 BFS 版本吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值