We are given a matrix with R
rows and C
columns has cells with integer coordinates (r, c)
, where 0 <= r < R
and 0 <= c < C
.
Additionally, we are given a cell in that matrix with coordinates (r0, c0)
.
Return the coordinates of all cells in the matrix, sorted by their distance from (r0, c0)
from smallest distance to largest distance. Here, the distance between two cells (r1, c1)
and (r2, c2)
is the Manhattan distance, |r1 - r2| + |c1 - c2|
. (You may return the answer in any order that satisfies this condition.)
Example 1:
Input: R = 1, C = 2, r0 = 0, c0 = 0 Output: [[0,0],[0,1]] Explanation: The distances from (r0, c0) to other cells are: [0,1]
Example 2:
Input: R = 2, C = 2, r0 = 0, c0 = 1 Output: [[0,1],[0,0],[1,1],[1,0]] Explanation: The distances from (r0, c0) to other cells are: [0,1,1,2] The answer [[0,1],[1,1],[0,0],[1,0]] would also be accepted as correct.
Example 3:
Input: R = 2, C = 3, r0 = 1, c0 = 2 Output: [[1,2],[0,2],[1,1],[0,1],[1,0],[0,0]] Explanation: The distances from (r0, c0) to other cells are: [0,1,1,2,2,3] There are other answers that would also be accepted as correct, such as [[1,2],[1,1],[0,2],[1,0],[0,1],[0,0]].
Note:
1 <= R <= 100
1 <= C <= 100
0 <= r0 < R
0 <= c0 < C
看到这个问题,应该不难,但是从最原始的想法挺麻烦,因为对每个cell[i,j],都有个对应的distance,然后对distance进行排序,最原始的想法需要保持这种关联。
借助std::sort和lambda表达式,似乎也就是个排序,不过排序的数组不是简单的int或者其他基本类型,这个比较函数也需要自己定义,代码如下。
class Solution {
public:
vector<vector<int>> allCellsDistOrder(int R, int C, int r0, int c0) {
vector<vector<int>> res;
for(int i = 0; i < R; i++)
for(int j = 0; j < C; j++)
{
vector<int> oneResult{i,j};
res.push_back(oneResult);
}
std::sort(res.begin(), res.end(), [=](vector<int>& cell1, vector<int>& cell2){
int dis1 = std::abs(cell1[0] - r0) + std::abs(cell1[1] - c0);
int dis2 = std::abs(cell2[0] - r0) + std::abs(cell2[1] - c0);
return dis1 <= dis2;
});
return res;
}
};
运行结果,
Runtime: 544 ms, faster than 8.96% of C++ online submissions for Matrix Cells in Distance Order.
Memory Usage: 19.5 MB, less than 65.00% of C++ online submissions forMatrix Cells in Distance Order.
不算特别差吧?还行。