C++复健行动

代码能力越来越差了,刷leetcode复健一下,顺便记录一下C++ STL的一些用法

2020-11-17

1030. 距离顺序排列矩阵单元格 难度:简单

题目描述

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:

1
2
3
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:

1
2
3
4
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:

1
2
3
4
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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/matrix-cells-in-distance-order

很简单的逻辑,用结构体随便写.jpg,但是这里要用到vector这个STL,不是很熟,写的很痛苦,贴一下官方题解吧

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution {
public:
vector<vector<int>> allCellsDistOrder(int R, int C, int r0, int c0) {
vector<vector<int>> ret;
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
ret.push_back({i, j});
}
}
sort(ret.begin(), ret.end(), [=](vector<int>& a, vector<int>& b) {
return abs(a[0] - r0) + abs(a[1] - c0) < abs(b[0] - r0) + abs(b[1] - c0);
});
return ret;
}
};

这里可以看到[=]进行了一次重载,我第一次见.jpg,拿小本本记录下来。是C11的新特性,参加这篇文章

原来vector可以放一个{i,j}进去,我也不知道,记下来。

vector的使用方法参见这篇blog

2020-11-18

134. 加油站