题解 | #牧场重组计划#

牧场重组计划

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秋招刷过的题

全部评论

相关推荐

点赞 评论 收藏
分享
10-22 19:44
门头沟学院 Java
面了100年面试不知...:那我得去剪个头
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务