大家好,我是开车的阿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; } };