提示:
1 <= R <= 100
1 <= C <= 100
0 <= r0 < R
0 <= c0 < C
思路:
基于提示:1 <= R <= 100, 1 <= C <= 100, 0 <= r0 < R, 0 <= c0 < C
R、C表示最远点, r0, c0是起始点。由于R/C最大值为100, r0/c0最小值是0,所以最远的distance是|100-0| + |100-0| = 200, 最近的distance是|0-0|+|0-0| = 0, 用一个list的list存储距离列表,然后将distance作为index存储到列表中;
class Solution:
def allCellsDistOrder(self, R, C, r0, c0):
dist_list = [[] for i in range(201)] # 初始化存储列表
for i in range(R):
for j in range(C):
distinct = abs(r0-i) + abs(c0-j) # 计算每个点到起点的距离
dist_list[distinct].append([i, j])
result = []
for i in dist_list: # 遍历
if i: # 如果该distance有list结果
result.extend(i) # 扩展起来
else:
continue # 如果为空,继续遍历
return result
一行代码
class Solution:
def allCellsDistOrder(self, R: int, C: int, r0: int, c0: int) -> List[List[int]]:
return sorted([[i,j] for i in range(R) for j in range(C)],
key = lambda x : abs((x[0]-r0)) + abs((x[1]-c0)))