题解 | #牧场重组计划#
牧场重组计划
https://www.nowcoder.com/practice/d62fe08f920249f5a078d49a60e31444
大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧。
这道题考察的知识点是矩阵操作和数组的索引运算。
思考过程:
给定一个 n × n 的二维矩阵,要求将其逆时针旋转90度,且要直接修改原始矩阵。
我们可以观察到,逆时针旋转90度后,矩阵中第 i 行的元素会变成旋转后矩阵的第 n-i-1 列的元素,即原始矩阵中的 matrix[i][j] 会变成旋转后矩阵的 matrix[j][n-i-1]。
为了不使用额外的空间,我们可以进行原地交换。具体步骤如下:
遍历矩阵的上半部分(行索引范围:0 到 n/2-1,列索引范围:0 到 (n+1)/2-1)。
对于当前元素 matrix[i][j],进行四个元素的交换:
将 matrix[i][j] 的值保存在临时变量 temp 中。
将 matrix[j][n-i-1] 的值赋给 matrix[i][j]。
将 matrix[n-i-1][n-j-1] 的值赋给 matrix[j][n-i-1]。
将 matrix[n-j-1][i] 的值赋给 matrix[n-i-1][n-j-1]。
将 temp 的值赋给 matrix[n-j-1][i]。
完成上述交换后,矩阵即完成了逆时针旋转90度的操作。
原始矩阵: 旋转后矩阵: a b c d e e j o t y f g h i j d i n s x k l m n o -> c h m r w p q r s t b g l q v u v w x y a f k p u
在代码实现中,我们使用两个嵌套的循环来遍历上半部分的矩阵元素,并进行交换操作。每次交换涉及四个位置的元素,最终完成逆时针旋转90度的操作。这里使用的编程语言是C++。
#include <vector>
class Solution {
public:
vector<vector<int>> rotatePastureCounterClockwise(vector<vector<int>>& matrix) {
int n = matrix.size();
for (int i = 0; i < n / 2; i++) {
for (int j = 0; j < (n + 1) / 2; j++) {
int temp = matrix[i][j];
matrix[i][j] = matrix[j][n - i - 1];
matrix[j][n - i - 1] = matrix[n - i - 1][n - j - 1];
matrix[n - i - 1][n - j - 1] = matrix[n - j - 1][i];
matrix[n - j - 1][i] = temp;
}
}
return matrix;
}
};
阿Q的题解 文章被收录于专栏
阿Q秋招刷过的题
安克创新 Anker公司福利 782人发布
