void Rotate90(vector<vector<int>>& matrix) {
int n = matrix.size();
// Step 1: Transpose the matrix along the main diagonal.
for (int i = 0; i < n; ++i) {
for (int j = i + 1; j < n; ++j) {
swap(matrix[i][j], matrix[j][i]);
}
}
// Step 2: Reverse each row.
for (int i = 0; i < n; ++i) {
reverse(matrix[i].begin(), matrix[i].end());
}
}
void FlipHorizontal(vector<vector<int>>& matrix) {
int n = matrix.size();
for (int i = 0; i < n; ++i) {
reverse(matrix[i].begin(), matrix[i].end());
}
}
垂直翻转
坐标变换: 原始位置 (i, j) 翻转后的新位置将是 (n-1-i, j)。
步骤:
对数组的整体进行垂直翻转。
void FlipVertical(vector<vector<int>>& matrix) {
int n = matrix.size();
for (int i = 0; i < n / 2; ++i) {
for (int j = 0; j < n; ++j) {
swap(matrix[i][j], matrix[n - 1 - i][j]);
}
}
}
沿对角线翻转
坐标变换: 原始位置 (i, j) 翻转后的新位置将是 (j, i)。
步骤:
对数组进行转置。
void FlipDiagonal(vector<vector<int>>& matrix) {
int n = matrix.size();
for (int i = 0; i < n; ++i) {
for (int j = i + 1; j < n; ++j) {
swap(matrix[i][j], matrix[j][i]);
}
}
}