【題目】
給出 r 行 c 列的矩陣,其中的單元格的整數座標為 (r, c),滿足 0 <= r < r 且 0 <= c < c。
另外,我們在該矩陣中給出了乙個座標為 (r0, c0) 的單元格。
返回矩陣中的所有單元格的座標,並按到 (r0, c0) 的距離從最小到最大的順序排,其中,兩單元格(r1, c1) 和 (r2, c2) 之間的距離是曼哈頓距離,|r1 - r2| + |c1 - c2|。(你可以按任何滿足此條件的順序返回答案。)
【示例 1】
輸入:r = 1, c = 2, r0 = 0, c0 = 0
輸出:[[0,0],[0,1]]
解釋:從 (r0, c0) 到其他單元格的距離為:[0,1]
【示例 2】
輸入:r = 2, c = 2, r0 = 0, c0 = 1
輸出:[[0,1],[0,0],[1,1],[1,0]]
解釋:從 (r0, c0) 到其他單元格的距離為:[0,1,1,2]
[[0,1],[1,1],[0,0],[1,0]] 也會被視作正確答案。
【示例 3】
輸入:r = 2, c = 3, r0 = 1, c0 = 2
輸出:[[1,2],[0,2],[1,1],[0,1],[1,0],[0,0]]
解釋:從 (r0, c0) 到其他單元格的距離為:[0,1,1,2,2,3]
其他滿足題目要求的答案也會被視為正確,例如 [[1,2],[1,1],[0,2],[1,0],[0,1],[0,0]]。
【提示】
1 <= r <= 100
1 <= c <= 100
0 <= r0 < r
0 <= c0 < c
【**】
【python】
【遍歷所有點+sort】
class
solution
:def
allcellsdistorder
(self, r:
int, c:
int, r0:
int, c0:
int)
-> list[list[
int]]:
points=
for i in
range
(r):
for j in
range
(c):
[i,j,
abs(i-r0)
+abs
(j-c0)])
points.sort(key=
lambda x:x[2]
)return
[[x[0]
,x[1]]
for x in points]
【桶排序】
class
solution
:def
allcellsdistorder
(self, r:
int, c:
int, r0:
int, c0:
int)
-> list[list[
int]]:
maxdist =
max(r0, r -
1- r0)
+max
(c0, c -
1- c0)
bucket = collections.defaultdict(
list
) dist =
lambda r1, c1, r2, c2:
abs(r1 - r2)
+abs
(c1 - c2)
for i in
range
(r):
for j in
range
(c):
bucket[dist(i, j, r0, c0)
][i, j]
) ret =
list()
for i in
range
(maxdist +1)
: ret.extend(bucket[i]
)return ret
【幾何法】
參考leetcode官方題解
class
solution
:def
allcellsdistorder
(self, r:
int, c:
int, r0:
int, c0:
int)
-> list[list[
int]]:
dirs =[(
1,1)
,(1,
-1),
(-1,
-1),
(-1,
1)] maxdist =
max(r0, r -
1- r0)
+max
(c0, c -
1- c0)
row, col = r0, c0
ret =
[[row, col]
]for dist in
range(1
, maxdist +1)
: row -=
1for i,
(dr, dc)
inenumerate
(dirs)
:while
(i %2==
0and row != r0)
or(i %2!=
0and col != c0):if
0<= row < r and
0<= col < c:
[row, col]
) row += dr
col += dc
return ret
Leetcode 1030 距離順序排列矩陣單元格
給出 r 行 c 列的矩陣,其中的單元格的整數座標為 r,c 滿足 0 r r 且 0 c c。另外,我們在該矩陣中給出了乙個座標為 r0,c0 的單元格。返回矩陣中的所有單元格的座標,並按到 r0,c0 的距離從最小到最大的順序排,其中,兩單元格 r1,c1 和 r2,c2 之間的距離是曼哈頓距離...
LeetCode1030 距離順序排列矩陣單元格
給出 r 行 c 列的矩陣,其中的單元格的整數座標為 r,c 滿足 0 r r 且 0 c c。另外,我們在該矩陣中給出了乙個座標為 r0,c0 的單元格。返回矩陣中的所有單元格的座標,並按到 r0,c0 的距離從最小到最大的順序排,其中,兩單元格 r1,c1 和 r2,c2 之間的距離是曼哈頓距離...
leetcode 1030距離順序排列矩形單元格
首先我們先看題目 要求我們對給出的長為r,寬慰c的單元格進行通過曼哈頓距離算與給定點的距離,然後再按照距離將座標排序,我們儲存座標的方法不變,還是用字典的方式,然後再分別加入其中 class solution def allcellsdistorder self,r int,c int,r0 int...