大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧。

题目考察的知识点

二维数组操作,模拟

题目解答方法的文字分析

这个问题可以通过模拟来解决。我们可以创建一个二维数组来表示牛群方阵,然后模拟每次移动的过程。

首先,我们可以初始化一个 n*n 的二维数组,并按照牛的编号填充每个位置。

然后,进行 k 次移动操作。每次移动操作,我们可以创建一个临时的二维数组,用来存放移动后的结果。根据规则,我们可以计算每个位置在移动后的位置,然后将对应的牛的编号填入临时数组。

最后,将临时数组赋值给原始数组,更新牛群方阵。

本题解析所用的编程语言

C++

完整且正确的编程代码

#include <vector>

using namespace std;

class Solution {
public:
    vector<vector<int>> rotateII(int n, int k) {
        vector<vector<int>> matrix(n, vector<int>(n)); // 牛群方阵
        int num = 1; // 牛的编号,从1开始

        // 初始化牛群方阵
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < n; ++j) {
                matrix[i][j] = num++;
            }
        }

        // 进行 k 次移动操作
        for (int t = 0; t < k; ++t) {
            vector<vector<int>> temp(n, vector<int>(n)); // 临时数组,存放移动后的结果

            // 根据规则进行移动操作
            for (int i = 0; i < n; ++i) {
                for (int j = 0; j < n; ++j) {
                    int newRow = (i - 1 + n) % n;
                    int newCol = (j - 1 + n) % n;
                    temp[newRow][newCol] = matrix[i][j];
                }
            }

            // 将临时数组赋值给原始数组,更新牛群方阵
            matrix = temp;
        }

        return matrix;
    }
};

您的关注、点赞、收藏就是我创作的动力,三连支持阿Q!