LeetCode每日一题,1030. Matrix Cells in Distance Order
先看题目描述
大意就是给定一个 R * C 的矩阵,再给定一个单元格 [r0, c0],将矩阵中所有单元格按照距离 [r0,c0] 的曼哈顿距离进行排列,(r1, c1) 和 (r2, c2) 之间的曼哈顿距离的定义为 |r1 - r2| + |c1 - c2|
算法和思路
直接排序
思路就是先存储下矩阵内所有的点,然后重写排序规则使其按照距离 [r0, c0] 的曼哈顿距离进行排序
BFS
思路就是从 [r0, c0] 单元格开始进行广度优先搜索,然后将搜索到的单元格依次添加到结果数组中
几何法
这个是看题解才知道的方法
我们也可以直接变换枚举矩阵的顺序,直接按照曼哈顿距离遍历该矩形即可
注意到曼哈顿距离相同的位置恰好构成一个斜着的正方形边框,因此我们可以从小到大枚举曼哈顿距离,并使用循环来直接枚举该距离对应的边框。我们每次从该正方形边框的上顶点出发,依次经过右顶点、下顶点和左顶点,最后回到上顶点。这样即可完成当前层的遍历
算法源码
直接排序
1 | import java.util.*; |
BFS
1 | import java.util.*; |
几何法
1 | import java.util.*; |